PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR FACULTAD DE INGENIERÍA ESCUELA DE SISTEMAS

Tamaño: px
Comenzar la demostración a partir de la página:

Download "PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR FACULTAD DE INGENIERÍA ESCUELA DE SISTEMAS"

Transcripción

1 PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR FACULTAD DE INGENIERÍA ESCUELA DE SISTEMAS DESARROLLO DE UN SISTEMA INFORMÁTICO DE CONTROL Y ADMINISTRACIÓN DE PACIENTES PARA EL CONSULTORIO MEDICO DEL CONSEJO DE SEGURIDAD NACIONAL (COSENA) QUE PERMITA LA AUTOMATIZACIÓN DE PROCESOS MEDIANTE LA UTILIZACIÓN DE PLATAFORMAS WEB. EDUARDO VINICIO ALBUJA ORLANDO ANDRÉS GUSTAVO CASTELLANOS MERA QUITO,

2 DEDICATORIA Quiero dedicar el presente proyecto de tesis a mis queridos padres, hermanos y amigos que supieron darme el valor y fortaleza necesaria para cumplir con una etapa más de mi vida, etapa universitaria que la recordaré y la llevaré con mucho cariño en mis pensamientos. AGRADECIMIENTOS También deseo destacar y por supuesto agradecer a todo el personal humano que hace de la Facultad de Ingeniería de la Pontificia Universidad Católica del Ecuador un ente formador de líderes con un alto valor ético, moral e intelectual. Muchas Gracias a todos Eduardo Albuja. DEDICATORIA La culminación de este esta etapa de mi vida reflejado en este proyecto va dedicado a mi familia y en especial a mi novia que siempre me apoyo en todo sentido para que yo siga delante con mi carrera, y con la que ahora me defiendo en el ámbito profesional. AGRADECIMIENTOS Quiero agradecer a todas las personas que me ayudaron a concluir con éxito mi carrera, a mis profesores de la Facultad de Ingeniera, Escuela de Sistemas que me forjaron con sus conocimientos los cuales me sirven al lo largo de mi vida profesional y personal y en especial a entidad que me abrió sus puertas para que yo me eduque en ella, mi universidad querida Pontificia Universidad Católica del Ecuador. Gracias por ayudarme a cumplir una más de mis metas!!! Andrés Castellanos. 2

3 ÍNDICE.- CAPITULO 1 - GENERALIDADES INTRODUCCIÓN JUSTIFICACIÓN ALCANCE OBJETIVO GENERAL OBJETIVOS ESPECÍFICOS METODOLOGÍA ESTÁNDARES TÉCNICOS 13 CAPITULO 2 - ENTORNO LABORAL DE LA EMPRESA (COSENA) INTRODUCCIÓN AL COSENA MISIÓN DEL CONSULTORIO MEDICO DEL COSENA VISIÓN DEL CONSULTORIO MEDICO DEL COSENA MANEJO Y ADMINISTRACIÓN DE PROCESOS ACTUALES NUEVA VISIÓN MEDIANTE LA IMPLEMENTACIÓN DE PROCESOS AUTOMATIZADOS 22 CAPITULO 3 - MARCO TEÓRICO INTRODUCCIÓN AL DESARROLLO DE LAS APLICACIONES WEB Niveles lógicos Modelos físicos de implementación El servidor Web como servidor de aplicaciones Nivel de aplicaciones remoto LA TECNOLOGÍA.NET La Evolución El entorno.net Framework Qué es el.net Framework? Una definición más profunda de.net Runtime del lenguaje común 40 3

4 3.2.6 Biblioteca de clases Capa de datos Capa de formularios y ASP ASP.NET Y SQL SERVER Introducción Gestión de la información empresarial Disponibilidad Escalabilidad Seguridad Facilidad de gestión Interoperabilidad Productividad para los desarrolladores Herramientas mejoradas Soporte ampliado de lenguajes de programación XML y servicios Web Inteligencia empresarial Plataforma integrada Mejoras en la toma de decisiones Seguridad y disponibilidad Capacidades de análisis de alcance empresarial global La Seguridad en SQL Server Computación confiable y SQL Server Seguridad por diseño Seguridad por defecto Seguridad en el desarrollo Comunicaciones Restricción del acceso de usuarios al servidor Inhabilitación de servicios y restricción de la configuración del servicio Reducción del área de ataques potenciales en las nuevas funciones ASP.NET y el motor de Base de Datos SQL Server Características Proteger el escenario El resultado ASP.NET y Servicios Empresariales y SQL Server Características Proteger el escenario El resultado ASP.NET y Servicios Web y SQL Server Proteger el escenario El resultado ASP.NET y Remoting y SQL Server Características Proteger el escenario El resultado ASP.NET Y LA SEGURIDAD Aplicaciones Web.NET Niveles lógicos Modelos físicos de implementación El servidor Web como servidor de aplicaciones 66 4

5 3.4.5 Nivel de aplicaciones remoto Tecnologías de Implementación ASP.NET Servicios Empresariales Servicios Web NET Remoting ADO.NET y SQL Server Seguridad del protocolo Internet (IPSec) Secure Sockets Layer (SSL) Arquitectura de Seguridad Seguridad en los niveles Guardianes y puertas Identidades y Principales WindowsPrincipal y WindowsIdentity GenericPrincipal y objetos de identidad asociados ASP.NET y HttpContext.User Identidades de ASP.NET Remoting y Servicios Web 81 CAPITULO 4 - DISEÑO Y CONSTRUCCIÓN DEL SISTEMA MODELAMIENTO DE LA BASE DE DATOS (ENTIDAD RELACIÓN) Diagrama Lógico del Sistema Médico Diagrama Físico del Sistema Médico Creación de Dominios Diccionario de Datos CONSTRUCCIÓN DE INTERFACES PROGRAMACIÓN DE CONTROLES WEB Control ToolTip Control Calendar Control GridView Control SqlDataSource Control DropDownList SEGURIDADES Administración de Usuarios en Estructuración de Usuarios en CONEXIONES ODBC 120 CAPITULO 5 - ANÁLISIS DE DEFECTOS Y CALIDAD DEL PRODUCTO DEFECTOS EN EL PRODUCTO Tipos de Defectos Pasos para encontrar Defectos 128 5

6 5.1.3 Estimación de Defectos Cómo eliminar los Defectos DEFECTOS DE DISEÑO DataGrid en ASP.NET Cómo configurar un proxy para acceder a servicios Web Usar el control calendario en ASP.NET Modificar calendario en tiempo de ejecución Envío de correo electrónico con ASP.NET CALIDAD DEL PRODUCTO PRUEBAS DEL PRODUCTO (Simulado) Estimación de Rendimiento (Simulado) 174 CAPITULO 6 - IMPLANTACIÓN Y COSTOS IMPLANTACIÓN DEL SISTEMA CONFIGURACIÓN Y PRUEBAS REALES DEL SISTEMA ESTIMACIÓN DE RENDIMIENTO (REAL) IMPLANTACIÓN Y CONFIGURACIÓN DEFINITIVA ESTIMACIÓN Y ANÁLISIS DE COSTOS 199 CAPITULO 7 - CONCLUSIONES Y RECOMENDACIONES CONCLUSIONES RECOMENDACIONES 205 CAPITULO 8 - GLOSARIO DE TÉRMINOS TERMINOLOGÍAS 207 DIAGRAMAS DIAGRAMA 1 "REALIZAR INFORMES MÉDICOS" 19 DIAGRAMA 2 "CONTROLAR PACIENTES TRATADOS" 20 DIAGRAMA 3 "ATENDER EMERGENCIAS MÉDICAS" 21 DIAGRAMA 4 "DISEÑO LÓGICO DEL SISTEMA MEDICO " 84 DIAGRAMA 5 "DISEÑO FÍSICO DEL SISTEMA MEDICO " 85 6

7 DIAGRAMA 6 "Estructuración de Usuarios en " 119 DIAGRAMA 7 "DISEÑO ESTRUCTURAL DE REDES" 182 DIAGRAMA 8 "INGRESO POR PRIMERA VEZ AL SISTEMA SIMULADO VS REAL" 196 DIAGRAMA 9 "INGRESO POSTERIORES AL SISTEMA SIMULADO VS REAL" 196 DIAGRAMA 10 "ALMACENAMIENTO DE INFORMACIÓN A LA BDD SIMULADO VS REAL" 197 DIAGRAMA 11 "CONSULTA DE INFORMACIÓN A LA BDD SIMULADO VS REAL" 197 DIAGRAMA 12 "CONFIRMACIÓN DE CITAS AL SIMULADO VS REAL" 198 GRÁFICOS Gráfico 1 Digitalización 23 Gráfico 2 Arquitectura Web Básica 25 Gráfico 3 El servidor Web como servidor de aplicaciones 32 Gráfico 4 La introducción de un nivel de aplicaciones remoto 32 Gráfico 5 Arquitectura.Net 35 Gráfico 6.Net Framework 37 Gráfico 7 Elementos de la tecnología.net 38 Gráfico 8 División de Capas 39 Gráfico 9 ASP.NET y SQL Server 52 Gráfico 10 La configuración de seguridad recomendada para el escenario de intranet de ASP.NET y SQL Server 54 Gráfico 11 ASP.NET llama a un componente de Servicios Empresariales que, a su vez, llama a la base de datos. 55 Gráfico 12 La configuración de seguridad recomendada para el escenario de intranet de ASP.NET y Servicios Empresariales locales y SQL Server 57 Gráfico 13 ASP.NET y servicio Web remoto y SQL Server 58 Gráfico 14 La configuración de seguridad recomendada para el escenario de intranet de ASP.NET y el servicio Web y SQL Server 60 Gráfico 15 ASP.NET y remoting mediante.net Remoting y SQL Server 61 Gráfico 16 La configuración de seguridad recomendada para el escenario de intranet de ASP.NET y el servicio Web remoto y SQL Server 63 Gráfico 17 Web como servidor de aplicaciones 66 Gráfico 18 La introducción de un nivel de aplicaciones remoto 67 Gráfico 19 Arquitectura de seguridad 70 Gráfico 20 Filtrado de usuarios con guardianes 75 Gráfico 21 Clases de implementación de IPrincipal e IIdentity 78 Gráfico 22 Defectos en los productos 124 Gráfico 23 Control Calendario 138 Gráfico 24 Control Calendario 139 Gráfico 25 Envío de 143 Gráfico 26 Software similares 200 Gráfico 27 Software similares 201 TABLAS Tabla 1: Medidas de seguridad 53 Tabla 2: Medidas de seguridad 56 Tabla 3: Medidas de seguridad 59 Tabla 4: Medidas de seguridad 62 7

8 Tabla 5: Características de seguridad 71 Tabla 6: Responsabilidades de los guardianes y las puertas que proporcionan 74 Tabla 7: Descripción Tablas del sistema 83 Tabla 8: Descripción Tabla Usuario 86 Tabla 9: Descripción Tabla Departamento 86 Tabla 10: Descripción Tabla Cargo 86 Tabla 11: Descripción Tabla Hora 86 Tabla 12: Descripción Tabla Cita 87 Tabla 13: Descripción Tabla Paciente 87 Tabla 14: Descripción Tabla Informe 87 Tabla 15: Descripción Tabla Consulta 87 Tabla 16: Descripción Tabla Historia Clínica 88 Tabla 17: Descripción de estilos 140 Tabla 18: Código generado por el modelo físico 148 Tabla 19: Rendimiento Simulado 174 Tabla 20: Objetos definidos en BDD SQL Server Tabla 21: Objetos definidos en réplica BDD SQL Server Tabla 22: Pasos de implantación 181 Tabla 24: Estimación Rendimiento Real 195 IMÁGENES Imagen 1 "Pantalla Login del Sistema" 96 Imagen 2 "Pantalla de Menú Principal del Administrador" 97 Imagen 3 "Pantalla de Administrador de Usuarios" 98 Imagen 4 "Pantalla de Consulta de Usuarios" 99 Imagen 5 "Pantalla de Datos Personales de usuario" 100 Imagen 6 "Pantalla Menú Avanzado" 101 Imagen 7 "Pantalla de Consulta de Citas" 102 Imagen 8 "Pantalla de Receta" 103 Imagen 9 "Pantalla de Historia Clínica" 104 Imagen 10 "Pantalla Examen Médico" 105 Imagen 11 "Pantalla Informe Medico" 106 Imagen 12 "Pantalla Menú Básico" 107 Imagen 13 "Pantalla Citas" 108 Imagen 14 "Pantalla Historial de Citas" 109 Imagen 15 "Pantalla Informes" 110 Imagen 16 "Pantalla Control Web ToolTip" 111 Imagen 17 "Pantalla Control Web Calendar" 112 Imagen 18 "Pantalla Control Web GridView" 113 Imagen 19 "Pantalla Control Web SqlDataSource" 114 Imagen 20 "Pantalla Control Web DropDownList" 115 Imagen 21 "Pantalla de Login" 118 Imagen 22 "Pantalla del motor SQL Server 2005" 147 Imagen 23 "Pantalla Ejecución de sentencias" 148 Imagen 24 "Pantalla Ejecución de sentencias" 149 Imagen 25 "Pantalla Identidad tabla Cita" 149 Imagen 26 "Pantalla Identidad tabla Cargo" 150 Imagen 27 "Pantalla Identidad tabla Departamento" 150 Imagen 28 "Pantalla Identidad tabla Hora" 151 8

9 Imagen 29 "Pantalla Identidad tabla Historia Clínica" 151 Imagen 30 "Pantalla Identidad tabla Informe" 152 Imagen 31 "Pantalla Identidad tabla Paciente" 152 Imagen 32 "Pantalla Datos básicos tabla Cargo" 153 Imagen 33 "Pantalla Datos básicos tabla Departamento" 154 Imagen 34 "Pantalla Datos básicos tabla Horario" 154 Imagen 35 "Pantalla Datos inicial Administrador tabla Usuario" 155 Imagen 36 "Pantalla Datos inicial Administrador tabla Paciente" 155 ANEXOS 210 Manual Técnico 211 Manual de Usuario 291 9

10 CAPITULO 1 GENERALIDADES 10

11 1.1 INTRODUCCIÓN Actualmente las tendencias mercantiles tienen un gran enfoque en el Internet, de ésta forma podemos aprovechar las innumerables ventajas que nos proporciona dicho acceso y aplicarlas en el desarrollo y automatización de procesos, en nuestro caso procesos personalizados que van dirigidos al área medica. Para esto la utilización de herramientas Web como ASP.Net nos brinda el soporte necesario para crear y desarrollar aplicativos, sistemas, etc. de fácil interacción con el usuario, debido a que ASP.Net se basa en un Common Language Runtime. La eficacia y la flexibilidad de toda esta plataforma se encuentra disponible para los programadores de aplicaciones Web. ASP.Net es también independiente del lenguaje, por lo que se puede elegir el lenguaje de programación que mejor se adapte a la aplicación o dividir la aplicación en varios lenguajes. Tomando estos pequeños datos de la herramienta a utilizarse se podrán sacar conclusiones muy valiosas con respecto a la utilidad, facilidad, desempeño, etc. que el sistema automatizado a implementarse en COSENA podrá tener. 1.2 JUSTIFICACIÓN La creciente demanda de contar con nuevas herramientas informáticas por parte de las empresas ha provocado un impulso considerable en el desarrollo de nuevos sistemas enfocados a obtener un mayor rendimiento reflejado en competitividad y eficiencia. Es por este motivo que actualmente se desarrollan sistemas informáticos basados especialmente en herramientas Web, las cuales nos pueden proveer de un gran potencial para la actual demanda del mercado. 11

12 El Consultorio Médico del Consejo de Seguridad Nacional COSENA ha considerado optar por la creación de un Sistema Automatizado de Control y Administración de Pacientes por medio de las actuales tendencias informáticas de desarrollo como lo es ASP.net Cabe indicar que actualmente los procesos que maneja el consultorio son manuales y no permiten el seguimiento adecuado ni la generación de indicadores de control. 1.3 ALCANCE El presente proyecto de disertación de Tesis de Grado, tiene como alcance el desarrollo de un Sistema Automatizado de Control y Administración de Pacientes para el Consultorio Médico COSENA en base a la utilización de la herramienta de desarrollo ASP.net. Una vez que el sistema se encuentre desarrollado en su totalidad y cumpla con todos los estándares de calidad y rendimiento, será implantado y configurado para su óptimo funcionamiento en las instalaciones del COSENA. Cabe indicar que el sistema a desarrollarse se acoplará perfectamente a las necesidades y requerimientos actuales de la Institución y para lograrlo se realizarán todas las pruebas de rendimiento necesarias para estimar la calidad y el perfecto funcionamiento; concluyendo con la capacitación al personal encargado de la utilización del sistema. Además, el alcance de nuestro Proyecto esta enfocado en la utilización de plataformas WEB, aprovechando las innumerables ventajas como: - Mejor interacción Paciente Médico. - Notificaciones automáticas vía . - Consultas Remotas de fichas médicas. 12

13 - Seguimiento de pacientes estructurado y organizado. - Agenda Electrónica. - Seguridades (Administración de Usuarios). 1.4 OBJETIVO GENERAL Desarrollar un sistema informático en la herramienta ASP.net que permita un adecuado Control y Administración de los Registros de Pacientes; y a su vez Implantarlo en el COSENA mediante la ejecución y puesta en marcha de dicho sistema, el cual permitirá optimizar los procesos administrativos y mejorar la calidad de la atención médica. 1.5 OBJETIVOS ESPECÍFICOS 1.- Analizar el estado actual del manejo de control y administración de pacientes en el Consultorio Médico COSENA para recopilar información relevante al nuevo sistema. 2.- Realizar el modelamiento de la Base de Datos con la que contará el Sistema en base a lógica de negocio. 3.- Desarrollar la aplicación Web de acuerdo a las necesidades primordiales del Consultorio Médico COSENA. 4.- Adaptar la aplicación desarrollada mediante pruebas para identificar posibles debilidades que pueda tener dicha aplicación con la interacción de datos y determinar posibles correcciones antes de su implementación final. 13

14 5.- Implementar la aplicación final después de haber analizado y corregido las posibles fallas y/o debilidades. 6.- Proveer de manuales (técnicos y de manejo) de la aplicación a los usuarios en general que interactúen con el Sistema. 7.- Realizar conclusiones y recomendaciones con respecto al desarrollo de este proyecto. 1.6 METODOLOGÍA Para la realización del siguiente proyecto se utilizará una metodología teórica y una metodología práctica en las cuales: Metodología Teórica.- Mediante esta metodología se realizará un análisis previo sobre el funcionamiento y la aplicabilidad de la herramienta de desarrollo ASP.Net en el sistema a desarrollarse en el consultorio médico COSENA. Para sustentar esta metodología utilizaremos el apoyo de libros, tutoriales, Internet y de más fuentes de acceso a información que nos permita reforzar los conocimientos. Metodología Práctica.- Mediante la aplicación de esta metodología se implementará un sistema que se adapte en forma real a las necesidades del usuario, basándonos en el análisis realizado en la metodología teórica. 14

15 1.7 ESTÁNDARES TÉCNICOS El modelo de desarrollo se desarrolla en base al ciclo de vida SDLC (Software Development Life Cycle) en base a los siguientes puntos: a) Análisis de requerimientos b) Diseño (modelamiento de BDD) c) Construcción y pruebas (programación) d) Implantación (puesta en marcha del sistema) e) Mantenimiento 15

16 CAPITULO 2 ENTORNO LABORAL DE LA EMPRESA (COSENA) 16

17 2.1 INTRODUCCIÓN COSENA La Secretaría General del Consejo de Seguridad Nacional, con sus Direcciones Nacionales Dependientes de: Inteligencia, Movilización, Defensa Civil e Instituto de Altos Estudios Nacionales, es un organismo de nivel superior y de carácter permanente, dependiente de la Presidencia de la República, responsable de: Asesorar al Consejo de Seguridad Nacional, proporcionándole inteligencia político estratégica. Información sobre recursos del poder nacional que pueden ser movilizados. Informar las actividades de prevención y atención para enfrentar desastres naturales. Preparar profesionales especializados en Seguridad y Desarrollo Nacionales. Facilitar el funcionamiento del Consejo de Seguridad Nacional, para la formulación de las Políticas de Seguridad Nacional. Tomar decisiones para enfrentar las amenazas de cualquier orden. Tramitar las decisiones del Presidente de la República. Elaborar el concepto estratégico nacional, planes y directivas de seguridad interna y externa, con sus planes anexos de Inteligencia, Movilización y Defensa Civil. Coordinar las actividades específicas con todos los organismos de Seguridad Nacional. 17

18 Investigar y actualizar la doctrina de Seguridad Nacional. Cabe destacar que La Secretaría General del COSENA, sustentada en un marco constitucional y jurídico actualizados, inscrita en un Estado moderno, con personería jurídica, será el organismo de excelencia, de reconocido prestigio, líder en asesoramiento, planificación y gestión en Seguridad Nacional, sobre la base de los intereses y objetivos nacionales para alcanzar el bien común de los ecuatorianos. El COSENA como organismo tiene definido políticas claras y concisas acerca de su funcionamiento, las cuales presentamos a continuación. Orientando la actualización y la difusión de la Doctrina e Institucionalidad de la Seguridad Nacional en el marco del mandato constitucional. Impulsando la consecución de los objetivos nacionales de seguridad para neutralizar las amenazas internas y externas, consolidar la vigencia del Estado y el bienestar de la sociedad ecuatoriana. Manteniendo un permanente ligamen Político Administrativo, de la Doctrina y la práctica de la Seguridad Nacional, entre la Secretaría General con sus Direcciones Nacionales Dependientes, y con las instituciones del Sistema de Seguridad Nacional. Fortaleciendo la investigación aplicada, en todos los organismos que conforman el Sistema Nacional de Inteligencia y para la formulación de la Política de Seguridad Nacional por parte del Presidente de la República Nacional. 18

19 Implementando un sistema moderno y actualizado de Movilización Nacional, así como el desarrollo de una cultura de movilización en la sociedad ecuatoriana. Implementando un sistema moderno y actualizado de gestión de riesgo, así como el desarrollo de una cultura de prevención y mitigación de desastres. Modernizando la estructura institucional y académica del Instituto de Altos Estudios Nacionales que posibilite la ampliación de la cobertura de los cursos de Seguridad y Desarrollo a nivel nacional. Para Complementar esta introducción del COSENA vamos a citar los objetivos estratégicos de dicho organismo. Mantener a la Secretaría General como el Organismo de nivel superior, de carácter permanente, en el asesoramiento, al Presidente de la República y al Consejo de Seguridad Nacional en materia de Seguridad Nacional. Fortalecer la planificación interna y externa de la Seguridad Nacional mediante la actualización permanente del concepto estratégico y los planes de Seguridad Nacional, en procura de alcanzar los objetivos nacionales permanentes y actuales. Fortalecer el proceso de coordinación y evaluación del sistema de Seguridad del Estado. Optimizar la producción de Inteligencia Político Estratégica de forma permanente y oportuna, para utilidad del Presidente de la República y los organismos del Sistema de Seguridad Nacional, a través de la Dirección Nacional de Inteligencia. 19

20 2.2 MISION DEL CONSULTORIO MEDICO DEL COSENA El Consultorio Médico del Consejo Nacional de Seguridad es un área dedicada a proporcionar a todo el personal que labora en ésta institución, asistencia médico-sanitaria preventiva y curativa de alta calidad, empleando para ello procedimientos y equipos médicos, mediante un recurso humano, altamente calificado para procurar el bienestar social de nuestros empleados. 2.3 VISION DEL CONSULTORIO MEDICO DEL COSENA Constituirse en un Consultorio Médico confiable y seguro que brinde atención médica asistencial de alto nivel, a través del trabajo eficiente en la operación y administración de sus procesos. 20

21 2.4 MANEJO Y ADMINISTRACIÓN DE PROCESOS ACTUALES (CONSULTORIO MEDICO) A continuación vamos a presentar los flujos gramas correspondientes a los procesos que actualmente son empleados dentro del consultorio médico. Diagrama 1 "Realizar Informe Médicos" 21

22 Diagrama 2 "Controlar Pacientes Tratados" 22

23 Diagrama 3 "Atender Emergencias Médicas" 23

24 2.5 NUEVA VISIÓN MEDIANTE LA IMPLEMENTACIÓN DE PROCESOS AUTOMATIZADOS Se tiene previsto que el consultorio médico (COSENA) después de la implantación y adecuada configuración del sistema a realizarse, presente una mejor perspectiva de funcionamiento y atención a los pacientes, este cambio es posible definirlo mediante la automatización de los procesos que en dicho consultorio se ejecutan diariamente. Actualmente los procesos de registro de pacientes, consulta de pacientes, actualización de datos del paciente, etc. Se lo hace de una forma manual y por ende el banco de datos de todos los pacientes se encuentra en papel (fichas médicas), lo cual no es óptimo y sobre todo seguro contando con todas las tecnologías y herramientas que tenemos a nuestro alcance. Ya hemos podido observar en los diagramas 1, 2, 3 el manejo y administración de los procesos actuales, ahora describiremos el manejo y administración de pacientes (previsto) o simulado con la implantación del sistema en el consultorio medico COSENA y por supuesto analizaremos las ventajas y los cambios significativos de dicha implantación. Para comenzar el consultorio médico tendrá un nuevo archivo de fichas médicas de todos los pacientes, este archivo será digital evitando de esta forma el papel y todos los riesgos que implica llevar tan importante información en medios físicos y no digitales, partiendo de este punto el sistema como tal ya va presentando ventajas. 24

25 Medio físico (papel) Medio digital (computador) Gráfico 1 Digitalización Debemos destacar también la organización por parte del consultorio en cuanto a citas ya que la agenda que se llevará tendrá un componente muy importante y es el de la automatización de procesos, ahora con la implantación del sistema se podrá alertar de forma automática cuando una cita este cerca de llegar, esta alerta será tanto para el paciente como para el médico. Estos son 2 ejemplos de lo que el sistema podrá realizará cuando ya este totalmente desarrollado y configurado para el óptimo funcionamiento. En general podemos concatenar todos los procesos que el sistema brindara para construir una nueva visión del consultorio médico, visión que esta enfocada a la eficacia y eficiencia de los procesos actuales y que por supuesto llevaran a otro nivel de calidad por parte del consultorio medico. 25

26 CAPITULO 3 MARCO TEÓRICO 26

27 3.1 INTRODUCCIÓN AL DESARROLLO DE LAS APLICACIONES WEB Con la introducción del Internet y del Web en concreto, se han abierto infinidad de posibilidades en cuanto al acceso a la información desde casi cualquier sitio. Esto representa un desafío a los desarrolladores de aplicaciones, ya que los avances en tecnología demandan cada vez aplicaciones más rápidas, ligeras y robustas que permitan utilizar el Web. Afortunadamente, tenemos herramientas potentes para realizar esto, ya que han surgido nuevas tecnologías que permiten cumplir con los más exigentes requisitos por parte del mercado, ahora con una amplia gama de recursos el único problema es decidir entre el conjunto de posibilidades la correcta para cada situación. Con un sin numero de posibilidades, conviene repasar algunos aspectos básicos de la arquitectura Web. Para abrir una página Web en un navegador, normalmente se teclea el correspondiente URL. Una vez que se solicita esta petición mediante el protocolo HTTP y la recibe el servidor Web, éste localiza la página Web en su sistema de ficheros y la envía de vuelta al navegador que la solicitó. 27

28 PETICION WEB SERVIDOR CLIENTE (BROWSER) INDEX RESPUESTA PAGINA WEB Gráfico 2 Arquitectura Web Básica En un principio la Web era sencillamente una colección de páginas estáticas, documentos, etc., para su consulta o descarga. El paso inmediatamente posterior en su evolución fue la inclusión de un método para elaborar páginas dinámicas que permitieran que lo mostrado tuviese carácter dinámico (es decir, generado a partir de los datos de la petición). Este método fue conocido como CGI ("Common Gateway Interface") y definía un mecanismo mediante el que se podía pasar información entre el servidor y ciertos programas externos. Los CGIs siguen utilizándose ampliamente; la mayoría de los servidores web permiten su uso debido a su sencillez. Además, dan total libertad para elegir el lenguaje de programación que se desea emplear. El funcionamiento de los CGIs tenía un punto débil: cada vez que se recibía una petición, el servidor debía lanzar un proceso para ejecutar el programa CGI. Como la mayoría de CGIs estaban escritos en lenguajes interpretados, como Perl o Python, o en lenguajes que requerían "run-time environment", como Java o Visual Basic, el servidor se veía sometido a 28

29 una gran carga. La concurrencia de múltiples accesos al CGI podía comportar problemas graves. Por eso se empiezan a desarrollar alternativas a los CGIs que solucionaran el problema del rendimiento. Las soluciones llegan básicamente por 2 vías: 1) se diseñan sistemas de ejecución de módulos mejor integrados con el servidor, que evitan la instanciación y ejecución de varios programas, y 2) se dota a los servidores un intérprete de algún lenguaje de programación que permita incluir el código en las páginas de forma que lo ejecute el servidor, reduciendo el intervalo de respuesta. Entonces se experimenta un aumento del número de arquitecturas y lenguajes que permiten desarrollar aplicaciones web. Todas siguen alguna de estas vías. Las más útiles y las más utilizadas son las que permiten mezclar los 2 sistemas: un lenguaje integrado que permita al servidor interpretar comandos "incrustados" en las páginas HTML y, además, un sistema de ejecución de programas mejor enlazado con el servidor, que no implique los problemas de rendimiento propios de los CGIs. Una de las más potentes es la tecnología.net ya que esta nos brinda el soporte necesario para crear y desarrollar aplicativos, sistemas, etc. de fácil interacción con el usuario, debido a que ASP.Net se basa en un Common Language Runtime. Con esta pequeña introducción acerca de lo que encierra la palabra WEB podremos ya crear una definición de lo que en si constituye una aplicación web. Una aplicación web, es una aplicación informática que los usuarios utilizan accediendo a un servidor web a través de Internet o de una intranet. Las aplicaciones web son populares debido a la practicidad del navegador web como cliente ligero. La habilidad para actualizar y mantener aplicaciones web sin distribuir e instalar software en miles de potenciales clientes es otra razón de su popularidad. 29

30 Una ventaja significativa en la construcción de aplicaciones web que soporten las características de los browsers estándar es que deberían funcionar igual independientemente de la versión del sistema operativo instalado en el cliente. En vez de crear clientes para Windows, Mac OS X, GNU/Linux, y otros sistemas operativos, la aplicación es escrita una vez y es mostrada casi en todos lados. Sin embargo, aplicaciones inconsistentes de HTML, CSS, DOM y otras especificaciones de browsers pueden causar problemas en el desarrollo y soporte de aplicaciones web. Adicionalmente, la habilidad de los usuarios a personalizar muchas de las características de la interfaz (como tamaño y color de fuentes, tipos de fuentes, inhabilitar Javascript) puede interferir con la consistencia de la aplicación web. Otra (poco común) aproximación es utilizar Macromedia Flash o Java applets para producir parte o toda la interfaz de usuario. Como casi todos los browsers incluyen soporte para estas tecnologías (usualmente por medio de plug-ins), aplicaciones basadas en Flash o Java pueden ser implementadas con aproximadamente la misma facilidad. Como hacen caso omiso de las configuraciones de los browsers estas tecnologías permiten más control sobre la interfaz, aunque incompatibilidad entre implementaciones de Flash o Java puedan traer nuevas complicaciones. Por las similitudes con una arquitectura cliente-servidor, con un cliente un poco especializado, hay disputas sobre si llamar a estos sistemas aplicaciones web ; un término alternativo es aplicación enriquecida de Internet. Aunque muchas variaciones son posibles, una aplicación web está comúnmente estructurada como una aplicación de tres-capas. En su forma más común, el navegador web es la primera capa, un motor usando alguna tecnología web dinámica es la capa de en medio, y una base de datos como última capa. El navegador web manda peticiones a la capa media, que la entrega valiéndose de consultas y actualizaciones a la base de datos generando una interfaz de usuario. 30

31 Uno de los primeros mecanismos para generar contenido dinámico para la Web es el API CGI. Este es un mecanismo muy simple que permite que un servidor Web ejecute un programa escrito en cualquier lenguaje de programación (ya sea como respuesta a un formulario HTML, a partir de un enlace, etc.), le pueda pasar unos parámetros (bien provenientes del usuario, vía formularios, bien algunos parámetros de configuración del servidor, del entorno de ejecución, etc.) y finalmente permite que el resultado de la ejecución de este programa sea enviado al usuario como una página Web o cualquier otro tipo de contenido (un gráfico, etc.). Este mecanismo tan simple permite que las páginas Web, hasta el momento de la aparición de CGI, unos contenidos estáticos e inmutables sean generadas dinámicamente en respuesta a peticiones concretas. Se abre así un nuevo mundo a los programadores de aplicaciones Web. No existe, al contrario de lo que sucede con los servlet, etc. ningún tipo de limitación al lenguaje de programación que podemos utilizar para escribir un CGI. Podemos usar desde scripts escritos en el lenguaje de la shell del sistema operativo hasta programas escritos en ensamblador, pasando por todo el abanico de lenguajes de programación existentes: C, C++, PERL, Python, etc. El lenguaje más popular hasta ahora, para la escritura de CGI es PERL, ya que proporciona utilidades al programador que simplifican mucho la tarea de escribir programas CGI. Las aplicaciones Web.NET sus características se describen desde un punto de vista tanto lógico como físico, conteniendo además una introducción a las diversas tecnologías de implementación utilizadas en la creación de aplicaciones Web.NET. 31

32 3.1.1 Niveles lógicos La arquitectura lógica de aplicaciones considera todos los sistemas como conjuntos de servicios en cooperación que se encuentran agrupados en los niveles siguientes: Servicios de usuarios Servicios empresariales Servicios de datos El valor de este punto de vista de la arquitectura lógica radica en la identificación de los tipos genéricos de servicios que siempre están presentes en cualquier sistema, para garantizar la segmentación adecuada y para impulsar la definición de interfaces entre niveles. Esta segmentación le permite tomar decisiones más discretas acerca de la arquitectura y del diseño al implementar cada nivel, y crear una aplicación más fácil de mantener. Los niveles pueden describirse tal y como se explica a continuación: Los Servicios de usuarios se encargan de la interacción de clientes con el sistema y proporcionan un puente común a la lógica empresarial básica encapsulada por componentes del nivel de Servicios empresariales. Tradicionalmente, los Servicios de usuarios suelen asociarse a los usuarios interactivos. No obstante, también llevan a cabo el procesamiento inicial de peticiones programables de otros sistemas, en las que no participa una interfaz de usuario visible. La autenticación y la autorización, cuya naturaleza exacta varía en función del tipo de cliente, suelen realizarse en el nivel de Servicios de usuarios. Los Servicios empresariales proporcionan la funcionalidad básica del sistema y encapsulan la lógica empresarial. Son independientes del canal de entrega, de los sistemas de servidor y de los orígenes de datos. Esto ofrece la estabilidad y la 32

33 flexibilidad necesarias para desarrollar el sistema de forma que admita canales y sistemas de servidor nuevos y diferentes. Normalmente, el procesamiento de una petición empresarial concreta requiere la participación de varios componentes en colaboración del nivel de Servicios empresariales. Los Servicios de datos proporcionan acceso a datos (alojados en los límites del sistema) y a otros sistemas (de servidor) a través de interfaces genéricas que resultan sencillas de utilizar desde componentes del nivel de Servicios empresariales. Los Servicios de datos compendian la diversidad de sistemas de servidor y orígenes de datos, y encapsulan reglas de acceso y formatos de datos específicos. La clasificación lógica de los tipos de servicios de un sistema puede corresponderse con la posible distribución física de los componentes que implementan los servicios, aunque es relativamente independiente de la misma. También es importante tener en cuenta que los niveles lógicos pueden identificarse en cualquier nivel de agregación; es decir, pueden identificarse para el sistema de forma global (en el contexto de su entorno e interacciones externas) y para cualquier subsistema contenido en ellos. Por ejemplo, cada nodo remoto que aloja un servicio Web se compone de Servicios de usuarios (que se ocupan de las peticiones y los mensajes entrantes), Servicios empresariales y Servicios de datos Modelos físicos de implementación Los tres niveles de servicios lógicos descritos anteriormente no suponen la existencia de un número específico de niveles físicos. Los tres servicios lógicos pueden estar ubicados físicamente en el mismo equipo o distribuidos en diversos equipos. 33

34 3.1.3 El servidor Web como servidor de aplicaciones Un patrón de implementación habitual de las aplicaciones Web.NET está dirigido a la búsqueda de componentes empresariales y de acceso a datos en el servidor Web. De este modo se reducen al mínimo los saltos de red, lo que puede mejorar el rendimiento. Este modelo se muestra en la siguiente ilustración. Gráfico 3 El servidor Web como servidor de aplicaciones Nivel de aplicaciones remoto El nivel de aplicaciones remoto es un patrón de implementación habitual, en concreto para los escenarios de Internet en los que el nivel Web es independiente en una red perimetral (también denominada DMZ, zona desmilitarizada y subred protegida) y está separado de los usuarios finales y del nivel de aplicaciones remoto por servidores de seguridad de filtrado de paquetes. El nivel de aplicaciones remoto se muestra en la siguiente ilustración. Gráfico 4 La introducción de un nivel de aplicaciones remoto 34

35 3.2 La Tecnología.Net La Evolución Hace varios años (aproximadamente una década atrás) las aplicaciones se creaban utilizando un mismo lenguaje para todas las tareas y para un sistema operativo concreto. Inicialmente las aplicaciones para Windows se realizaban en C. El trabajo era enorme por dos cosas: la complejidad del lenguaje y la necesidad de conocer todos los detalles del sistema operativo para poder programar sobre él. Ahí nació Visual Basic, como una herramienta que permitía el desarrollo de las interfaces de una forma tremendamente sencilla para lo conocido hasta entonces y con un lenguaje conocido por entonces como el Basic. Se utilizaban los controles en formato VBX para diseñar las ventanas y luego un mecanismo de métodos y eventos para controlar el código. La parte profesional evolucionó al C++, un lenguaje orientado a objetos muy complejo y difícil de mantener. Por otro lado Visual Basic seguía avanzando con los COM (Component Objetc Model): un modelo de objetos que permitía la reutilización de componentes independiente del lenguaje con el que estuviesen escritos, así transcurrieron las versiones 5 y 6 de Visual Basic que se convirtieron en los entornos más importantes del panorama Windows. Con el tiempo además de los COM aparecieron otras técnicas complementarias para ampliar los lenguajes existentes. Pero esto heterogeneidad de tecnologías, muchas veces dictadas por las necesidades tecnológicas del momento, como Internet, hicieron que se produjeran multitud de servicios duplicados, creación de servicios exclusivamente para algunos lenguajes, poca reutilización de código, mas complejidad. 35

36 La solución definitiva se ha planteado con.net que consta de una serie de servicios iguales en todos los lenguajes que mantienen la integridad con los desarrollos existentes y hace posible una interoperatividad entre los lenguajes desconocida hasta el momento. Esto es podemos utilizar varios lenguajes diferentes (los permitidos.net) y todos tendrán disponibles desde el mismo entorno de desarrollo hasta los controles y componentes de programación. Se acabó que Visual C tenga estos componente o Visual Fox Pro otros o Visual Basic otros... todos parten de la tecnología.net y comparten por lo tanto los mismos componentes y objetos. Podemos incluso escribir partes distintas de un mismo programa con varios lenguajes.net. 36

37 ARQUITECTURA.NET Clientes Servidores Web Servidores Empresa Servidores de Datos IE6 HTML WML ASP.NET VB.NET C++.NET C# JScript.NET Enterprise servers DCOM/COM+ XML SQL Server Procedimientos almacenados ADO.NET Gráfico 5 Arquitectura.Net El entorno.net Framework La tecnología.net usa una jerarquía de clases que están incluidas en el.net Framework, por tanto conocer el.net Framework nos ayudará a conocer al propio Visual Basic.NET, aunque también necesitarás conocer la forma de usar y de hacer del VB.NET ya que, aunque en el fondo sea lo mismo, el aspecto sintáctico es diferente para cada uno de los lenguajes basados en.net Framework Qué es el.net Framework?.NET Framework es un entorno para construir, instalar y ejecutar servicios Web y otras aplicaciones. 37

38 Se compone de tres partes principales: el Common Language Runtime, las clases Framework y ASP.NET El.NET Framework es un entorno multi-lenguaje para la construcción, distribución y ejecución de Servicios Webs y aplicaciones. El.NET Framework es una nueva plataforma diseñada para simplificar el desarrollo de aplicaciones en el entorno distribuido de Internet. Actualmente.NET es una nueva filosofía en cuanto a entornos de desarrollo. Este entorno puede utilizar varios lenguajes diferentes para escribir programas, todos se apoyarán en las herramientas que ofrece para conseguir aplicaciones.net y el núcleo de este entorno es el.net Framework.Net Framework permite el desarrollo de aplicaciones a través del uso de un conjunto de herramientas y servicios que proporciona y que se agrupan en tres bloques: El entorno de ejecución común ó Common Languaje Runtime (CLR) Jerarquía de clases de.net Motor de generación de formularios, para crear nuestras aplicaciones El Common Language Runtime (CLR) es una serie de librerías dinámicas (DLLs), también llamadas assemblies (o ensamblados), que hacen las veces de las DLLs del API de Windows así como las librerías runtime de Visual Basic o C++. 38

39 .NET Framework VB C++ C# Servicios Web Perl Python ASP.NET Formularios Windows ADO.NET: Datos y XML Libreria de clases de.net Common Language Runtime Message Queuing COM+ (Transactions, Partitions, Object Pooling) IIS WMI Win32 Gráfico 6.Net Framework Los pocos flexibles modelos de programación actuales impiden al programador contemplar la idea de un proyecto para Internet que le permita crear aplicaciones distribuidas más potentes. Estos sistemas utilizaban las tecnologías COM, ASP, ADO,... que individualmente son buenas pero que no están pensadas para ser ejecutadas en la red. Estos elementos definían la arquitectura Windows DNA (Distributed Internet Architecture) que hasta ahora era el modelo de programación para Internet. Esta tecnología queda ahora desplazada completamente por la arquitectura.net En la siguiente ilustración podremos observar la estructuración de la tecnología.net en base a sus elementos. 39

40 Elementos de la Tecnología.NET Herramientas de desarrollo Servicios Web XML Servidores de empresa Aplicaciones de cliente Gráfico 7 Elementos de la tecnología.net 40

41 3.2.4 Una definición más profunda de.net La mejor forma de comprender cómo funciona.net es analizar las numerosas capas en las que se divide.net Framework. Gráfico 8 División de Capas Como hemos comentado antes.net Framework constituye la base sobre la que se asienta.net. Para nosotros es la pieza fundamental de esta nueva tecnología y es la que nos va a proporcionar las herramientas y servicios que necesitaremos en nuestros desarrollos. Podemos agrupar en tres bloques el conjunto de herramientas y servicios: El runtime de lenguaje común o entorno de ejecución común (CLR) Biblioteca de clases base de la plataforma.net (.NET Framework Base Classes) Motor de generación de la interfaz para crear formularios e interfaces de usuario. 41

42 Estas son tres de las capas del esquema anterior. Simplemente esa jerarquía nos dice que en el nivel más alto están los lenguajes que vamos a utilizar en nuestro desarrollo con.net que pueden ser varios (en nuestro caso ASP). Luego traduce esas instrucciones al estándar.net para poder trabajar con esas instrucciones de una forma independiente al lenguaje con que se escribieron Runtime del lenguaje común El runtime del lenguaje común es la primera capa que pertenece a.net Framework. Esta capa es la responsable de los servicios básicos de.net, tales como la administración de memoria, la recolección de los elementos no utilizados, el control estructurado de excepciones y del subprocesamiento múltiple. Si.NET se transporta a otras arquitecturas que no estén basadas en Windows el primer paso sería escribir un runtime del lenguaje para el nuevo equipo. El CLR tiene estas características: Proporciona mejoras para el programador que antes tenía que elaborar Administra el código en tiempo de ejecución: carga en memoria, liberación de memoria. Gestiona la seguridad del código ejecutado Abre posibilidades a otros fabricantes para incorporar sus lenguajes Facilita la distribución e instalación de aplicaciones. Elimina los temibles conflictos de DLL's y versiones de ellas Biblioteca de clases La biblioteca de clases base (BCL) es la parte de.net Framework que define todos los tipos de datos básicos, tales como System.Object (raíz de la jerarquía de objetos.net), tipos numéricos y de fechas, tipo string, matrices y colecciones. La BCL contiene también clases que administrarán las características centrales de.net: entrada/salida de archivos, subprocesamiento, serialización y seguridad. La forma en la que los tipos se implementan 42

43 en la BCL siguen las especificaciones llamadas Common Type System (CTS). Por ejemplo, estas especificaciones dicta la forma en la que un tipo.net expone campos, propiedades, métodos y sucesos, también cómo un tipo puede heredar otro tipo Capa de datos La capa de datos y XML contienen las clases.net que trabajan con bases de datos y con XML. Anteriormente el soporte XML era una compatibilidad proporcionada por un componente externo. En.NET vemos cómo está integrado en su mismo núcleo. Podemos decir que XML es el formato que utiliza.net para almacenar cualquier tipo de información. La parte de datos es la que se conoce como ADO.NET y es el equivalente en.net a la tecnología ActiveX Data Object (ADO) Capa de formularios y ASP Las dos capas siguientes son ASP.NET y Windows Forms. Aquí se sitúan todas las clases que podremos utilizar para generar las páginas web en el primer caso y las ventanas estándares o formularios en las aplicaciones de Windows en el segundo caso. Aunque estén en el mismo nivel las tecnologías son muy distintas. Web Forms se ejecuta en el servidor y produce HTML y es la base de las conocidas Intranets donde estas páginas devuelven otras páginas web con conjuntos de resultados u otros datos. Windows Forms se ejecuta en el cliente, un equipo Windows. La biblioteca de clases de.net Framework está formada por una colección de ensamblados (o Assembly), cada uno de los cuales comprende una o más DLL. Un ensamblado consiste en un conjunto de tipos y recursos reunidos para formar la unidad mas elemental de código que puede ejecutar el entorno.net Framework. Estos ensamblados son los elementos con los que construiremos una aplicación: una aplicación.net se compone de varios ensamblados. Podemos llamar también a un ensamblado como 43

44 una DLL lógica (recordamos que una DLL es una biblioteca de enlaces dinámicos). Decimos lógica porque se trata de una lista de ficheros que se referencian en tiempo de ejecución pero que no se compilan para producir un fichero físico, a diferencia de las DLL's tradicionales. Un ensamblado va mucho más allá ya que puede contener otros recursos además de clases como imágenes. 3.3 Asp.net y SQL Server Introducción Hemos creído conveniente tratar acerca de la integración de ASP.Net con el motor de Base de Datos SQL Server debido a su fácil conectividad e interacción existente entre estas dos herramientas, además de que el sistema a implantarse tendrá un respaldo de su información en este motor de base de datos. Las empresas de hoy se enfrentan a varios desafíos de información inéditos: la proliferación de sistemas y datos en el seno de sus empresas; la necesidad de proporcionar a sus empleados, clientes y partners acceso coherente a dichos datos; el deseo de ofrecer información plena de sentido a quienes trabajan con ésta para que puedan tomar decisiones fundamentadas y el imperativo de controlar los costes sin sacrificar por ello la disponibilidad de las aplicaciones, la seguridad o la fiabilidad. La próxima versión de servidor SQL Server 2005, ha sido diseñada para ayudar a las empresas a enfrentarse a estos retos. SQL Server 2005 es la solución de gestión de la información de Microsoft para la próxima generación, que procurará mayor escalabilidad, disponibilidad y seguridad a la información empresarial y las aplicaciones de análisis al tiempo que simplificará su creación, implantación y gestión. Esta solución, erigida sobre la fortaleza de SQL Server 2000, proporcionará una solución integrada de gestión de la información que ayudará a empresas de cualquier tamaño a: 44

45 Desarrollar e implantar aplicaciones empresariales más escalables, fiables y seguras. Optimizar la productividad del sector TI reduciendo la complejidad en la creación, implantación y administración de las aplicaciones de bases de datos. Aumentar las capacidades de los desarrolladores con un entorno de desarrollo valioso, flexible y actual para que creen bases de datos más seguras. Compartir datos a través de múltiples plataformas, aplicaciones y dispositivos para facilitar la interconexión entre sistemas internos y externos. Ofrecer soluciones de inteligencia empresarial que ayuden a tomar decisiones con fundamento y aumentar la productividad por toda la empresa. Controlar los costes sin sacrificar el rendimiento, la disponibilidad ni la fiabilidad Gestión de la información empresarial En el mundo conectado de hoy, la información y los sistemas que la gestionan deben estar siempre disponibles para los usuarios. Con SQL Server 2005 los usuarios y los profesionales de TI de su empresa disfrutarán de las ventajas una reducción de los tiempos de inactividad de las aplicaciones, mayor escalabilidad y rendimiento y estrictos controles de seguridad. SQL Server 2005 también incluye funciones novedosas y mejoradas que contribuirán a aumentar la productividad de su empresa y de su departamento de TI. SQL Server 2005, basado en el mismo enfoque flexible de SQL Server 2000, admitirá la implantación de múltiples utilidades, desde centros de datos de más de un terabyte de tamaño hasta dispositivos móviles que se ejecuten en Microsoft SQL Server Windows CE Edition (SQL Server CE). SQL Server 2005 comprenderá también mejoras significativas de gestión de la información empresarial en los siguientes aspectos: 45

46 3.3.3 Disponibilidad Las inversiones en tecnologías de alta disponibilidad, las soluciones de copia de seguridad y recuperación adicionales y las mejoras en los sistemas de réplica permitirán a las empresas desarrollar e implantar aplicaciones de gran fiabilidad. Algunas características innovadoras que aumentan la disponibilidad, como las operaciones de reflejo (mirroring) de bases de datos, la configuración en clúster de conmutación tras error (failover) y las mejoras en las operaciones en línea minimizarán los tiempos de inactividad y ayudarán a garantizar que los sistemas más importantes de la empresa se mantienen accesibles Escalabilidad Los adelantos a este respecto, como la visión de partición de tablas, el aislamiento de instantáneas y el soporte de 64-bit le permitirán desarrollar e implementar las aplicaciones más demandadas mediante SQL Server 2005 La partición de tablas e índices mejoran sensiblemente el resultado de las consultas, al contrario de lo que ocurre con bases de datos muy extensas Seguridad Con mejoras tales como ajustes de configuración predeterminados de seguridad y un modelo de seguridad mejorado, se facilitará el logro de más altos niveles de seguridad de la información empresarial Facilidad de gestión Un nuevo conjunto de herramientas, funciones de auto-sintonización ampliadas y un potente modelo de programación facilitarán a los administradores de datos llevar un control flexible de las operaciones diarias de bases de datos. Las mejoras incorporadas a herramientas 46

47 como SQL Profiler y otras ayudaran también a los administradores de datos a poner a punto sus servidores en situación de óptimo rendimiento. Con estas mejoras, a los administradores de bases de datos les resultará más fácil centrarse en las tareas importantes ya que perderán menos tiempo en operaciones rutinarias de bases de datos Interoperabilidad Los adelantos tecnológicos que se incorporan en SQL Server 2005 le permitirán optimizar su inversión tanto en nuevos sistemas como en los existentes a través de la integración y conexión de aplicaciones y bases de datos descentralizadas dentro de su empresa extendida. Mediante un fuerte apoyo a los estándares del sector, los servicios Web y la plataforma Microsoft.NET Framework, SQL Server 2005 admitirá la interoperabilidad con múltiples plataformas, aplicaciones y dispositivos. SQL Server también está estrechamente vinculado con otros productos de Microsoft, desde Microsoft Windows Server o Microsoft Visual Studio hasta Microsoft Office, lo que permitirá a su empresa ahorrar tiempo y dinero al poder utilizar una tecnología que funciona bien de forma integrada Productividad para los desarrolladores Uno de los principales obstáculos a la productividad de los desarrolladores ha consistido en la falta de herramientas integradas para el desarrollo de bases de datos y la depuración. SQL Server 2000 ayudó a salvar este escollo al proporcionar una estrecha integración con Microsoft Visual Studio. La solución SQL Server 2005 supondrá avances adicionales que cambian de forma esencial la manera en que se desarrollan e implantan las bases de datos. A través de soporte para XML (Extensible Markup Language) y de una mayor integración con las tecnologías.net y las herramientas de desarrollo de Microsoft, SQL Server 2005 aumentará de forma significativa la productividad y flexibilidad de los desarrolladores. 47

48 Entre las mejoras que aportará a la productividad de los desarrolladores se incluyen las siguientes: Herramientas mejoradas Los desarrolladores podrán utilizar una herramienta de desarrollo para Transact-SQL, XML, MDX (Multidimensional Expresión) y XML/A (XML for Analysis). La posibilidad de integración con el entorno de desarrollo de Visual Studio resultará en un desarrollo y depuración de errores más eficientes de las aplicaciones de línea de negocio y de inteligencia empresarial Soporte ampliado de lenguajes de programación Con el CLR ( common language runtime ) alojado en el motor de la base da datos, los desarrolladores tendrán la opción de escoger entre una variedad de lenguajes familiares para desarrollar aplicaciones de bases de datos, incluyendo Transact-SQL, Microsoft Visual Basic.NET y Microsoft Visual C#.NET. Además, el almacenamiento de CLR proporcionará a los desarrolladores más flexibilidad mediante el uso de tipos y funciones definidos por el usuario. El CLR también procurará oportunidades de usar el código de terceros para el desarrollo rápido de aplicaciones de bases de datos XML y servicios Web Adelantos como XQuery y datos XML nativos ayudarán a las empresas a interconectar sin complicaciones los sistemas internos y externos. SQL Server 2005 admitirá tanto datos relacionales como XML de forma nativa, con lo que las empresas podrán almacenar, gestionar y analizar la información de la manera que más se ajuste a sus necesidades. El soporte para los estándares existentes o los que están surgiendo, tales como el HTTP, XML, SOAP (Simple Object Access Protocol), Xquery o XSD (XML Schema Definition) también facilitarán la comunicación a través de los sistemas empresariales extendidos. 48

49 Inteligencia empresarial La inteligencia empresarial representa al mismo tiempo un reto y una promesa que radican en proporcionar a los empleados la información apropiada en el momento oportuno. Para hacer frente a este reto se requiere una solución de inteligencia empresarial integral, segura, integrada como los sistemas operativos y disponibles en cualquier momento del día todos los días. SQL Server ayudará a las empresas a alcanzar este objetivo con SQL Server Los adelantos de inteligencia empresarial comprenden lo siguiente: Plataforma integrada Desarrollado sobre la base de SQL Server 7.0 y SQL Server 2000, SQL Server 2005 facilitará una plataforma integral de inteligencia empresarial con procedimientos analíticos integrados, entre los que se incluyen el procesamiento analítico en línea (OLAP), minería de datos (data mining); las herramientas ETL de gestión, administración y carga, el almacenamiento de datos y las funciones relacionadas con informes. Este enfoque global e integrado contribuirá a que las empresas construyan y desarrollen sin complicaciones aplicaciones de inteligencia empresarial robustas y controlen al mismo tiempo los costes Mejoras en la toma de decisiones Las mejoras en los principales utilidades de inteligencia empresarial existentes, tales como OLAP, Data Mining y la introducción de un nuevo servidor de informes procurarán a las empresas la capacidad de transformar la información en decisiones más acertadas en todos los niveles de la empresa, desde el profesional de la información hasta al consejero delegado. 49

50 Seguridad y disponibilidad Las mejoras en la escalabilidad, disponibilidad y seguridad ayudarán a proporcionar a los usuarios acceso sin interrupciones a las aplicaciones e informes de inteligencia empresarial Capacidades de análisis de alcance empresarial global Una herramienta ETL más completa permitirá a las empresas integrar y analizar la información con más facilidad desde múltiples fuentes de información heterogéneas. Dado que será posible analizar datos a través de una amplia serie de sistemas operativos, las empresas lograrán colocarse en una posición de ventaja competitiva gracias a una comprensión global de su negocio La Seguridad en SQL Server 2005 En enero de 2002, Microsoft presentó la iniciativa Computación Confiable, pensada para mejorar cuestiones de seguridad, privacidad, confiabilidad e integridad de negocios. Como parte de esta iniciativa, Microsoft cumple con procesos de desarrollo que apuntan a que los productos sean seguros en materia de diseño, configuración y desarrollo. El equipo de desarrollo de SQL Server ha incorporado estos procesos en el desarrollo de SQL Server 2005, la nueva versión de SQL Server Computación confiable y SQL Server 2005 La iniciativa de Computación Confiable delimita un marco que define los pasos necesarios para respaldar la seguridad informática y, de esta manera, tomar las medidas que servirán al desarrollo y la manutención de un entorno seguro. Estos pasos ayudan a proteger la confidencialidad, la integridad y la disponibilidad de datos y sistemas en cada fase del ciclo 50

51 de vida del software -el diseño, la entrega, la manutención-. Para Microsoft, los objetivos de la iniciativa Computación Confiable apuntan a: Reducir problemas potenciales de seguridad a partir del diseño y testing de productos. Reducir el área de ataques potenciales a partir de la inhabilitación de funciones que pueden resultar innecesarias. También asegurar que, durante su instalación, el producto elija los valores de configuración correctos para todas las opciones. Proporcionar las herramientas y las guías necesarias que fomentan las acciones de protección, detección, defensa, recuperación y manutención. Crear la documentación necesaria que comunique en forma regular la última información sobre seguridad, para que los mismos clientes puedan ocuparse de la seguridad e integridad de su entorno de SQL Server. En consonancia con los cuatro preceptos de la iniciativa de Computación Confiable, Microsoft y el equipo de SQL Server adoptaron las siguientes medidas: Seguridad por Diseño El equipo de desarrollo de SQL Server realizó numerosas intervenciones en materia de seguridad y dedicó más de dos meses al estudio de los componentes de SQL Server. Para cada amenaza potencial de seguridad, el equipo hizo un análisis de la situación y realizó trabajos de diseño y testing suplementarios que apuntan a neutralizar problemas potenciales de seguridad. Como resultado de estos esfuerzos de diseño, SQL Server 2005 incluirá nuevas funciones de seguridad. 51

52 Seguridad por defecto Para su instalación, SQL Server 2005 elegirá los valores de configuración correctos para todas las opciones, asegurándose así de que la instalación de sistemas se realice en el estado seguro por default Seguridad en el desarrollo Microsoft creó contenido para que las organizaciones puedan desplegar SQL Server con las credenciales de seguridad apropiadas y para que comprendan los pasos y permisos requeridos. Las herramientas de desarrollo de SQL Server proporcionan la información necesaria para comprender las decisiones que deben tomarse durante la etapa de desarrollo. Por otra parte, las actualizaciones de seguridad son fáciles de encontrar y de instalar (de elegir la opción correspondiente, las actualizaciones se instalarán automáticamente). Las herramientas también se encuentran disponibles para enfrentar los riesgos de seguridad que corren las organizaciones Comunicaciones Para asegurar el soporte del desarrollo de SQL Server, Microsoft difunde comunicaciones permanentes sobre cuestiones de seguridad. La página sobre Recursos de Seguridad sirve como un archivo central con toda la información sobre seguridad relacionada con SQL Server, incluyendo amenazas de seguridad y parches y herramientas que sirven para mitigar dichas amenazas. SQL Server 2005 incorporará mejoras y funciones de seguridad que coinciden con los objetivos de la iniciativa Computación Confiable. En general, estas funciones y mejoras recaen en las siguientes medidas: 52

53 Restricción del acceso de usuarios al servidor SQL Server 2005 proporciona más control de acceso a SQL Server y permite que los administradores controlen dicho acceso a través de distintas políticas Inhabilitación de servicios y restricción de la configuración del servicio Los administradores podrán restringir el acceso a los recursos de SQL Server en función del alcance otorgado al administrador y con una fina variedad de opciones. Los administradores también contarán con un sistema manejable que no viola el principio de menos privilegios. Al contar con ciertos servicios inhabilitados por default para nuevas instalaciones de servidores, los administradores se involucrarán de un modo más activo en la elección de los servicios que pretenden habilitar Reducción del área de ataques potenciales en las nuevas funciones Empezando por la configuración e instalación de SQL Server, el área de ataques potenciales se encontrará minimizada. A través del ciclo de desarrollo del producto, se ha repasado y evaluado la seguridad de las nuevas funciones para ayudar a reducir la superficie de ataque ASP.NET y el motor de Base de Datos SQL Server Una base de datos distribuye datos por usuario de forma segura en una intranet homogénea. La aplicación utiliza un modelo de subsistemas de confianza y ejecuta llamadas en nombre de los llamadores originales. La aplicación autentica los llamadores mediante la autenticación integrada de Windows y realiza llamadas a la base de datos con la identidad del proceso de ASP.NET. Debido al carácter confidencial de los datos, se emplea SSL entre el servidor Web y los clientes. 53

54 La siguiente ilustración muestra el modelo básico de este escenario de aplicaciones. Gráfico 9 ASP.NET y SQL Server Características Este escenario tiene las siguientes características: Los clientes tienen Internet Explorer. Las cuentas de usuario están en el servicio de directorios de Microsoft Active Directory. La aplicación proporciona datos confidenciales por usuario. Sólo deben obtener acceso a la aplicación los clientes autenticados. La base de datos confía en la aplicación para la autenticación correcta de usuarios (es decir, la aplicación realiza llamadas a la base de datos en nombre de los usuarios). Microsoft SQL Server utiliza una sola función de usuario de base de datos para la autorización Proteger el escenario En este escenario, el servidor Web autentica el llamador y restringe el acceso a los recursos locales mediante la identidad del llamador. No es necesario realizar la suplantación en la aplicación Web para restringir el acceso a recursos con el llamador original. La base de datos realiza la autenticación con la identidad del proceso predeterminada de ASP.NET, que 54

55 se trata de una cuenta con los mínimos privilegios (es decir, la base de datos confía en la aplicación ASP.NET). Tabla 1: Medidas de seguridad Categoría Detalles Autenticación Proporcione autenticación segura en el servidor Web para autenticar llamadores originales mediante la autenticación integrada de Windows en IIS. Utilice la autenticación de Windows en ASP.NET (sin suplantación). Proteja las conexiones a la base de datos mediante SQL Server configurado para utilizar la autenticación de Windows. La base de datos confía en el proceso de trabajo de ASP.NET para realizar llamadas. Autentique la identidad del proceso de ASP.NET en la base de datos. Autorización Configure recursos en el servidor Web mediante ACL vinculadas a los llamadores originales. Para facilitar la administración, los usuarios se agregan a grupos de Windows y los grupos se utilizan en las ACL. La aplicación Web realiza comprobaciones de funciones de.net con el llamador original para restringir el acceso a las páginas. Comunicación segura Proteja los datos confidenciales enviados entre el servidor Web y la base de datos. Proteja los datos confidenciales enviados entre los llamadores originales y la aplicación Web. 55

56 El resultado La siguiente ilustración muestra la configuración de seguridad recomendada para este escenario. Gráfico 10 La configuración de seguridad recomendada para el escenario de intranet de ASP.NET y SQL Server ASP.NET y Servicios Empresariales y SQL Server En este escenario, las páginas ASP.NET llaman a componentes empresariales alojados en una aplicación de Servicios Empresariales que, a su vez, se conecta a una base de datos. Como ejemplo, considere un sistema interno de emisión de pedidos de compra que utiliza transacciones en la intranet y permite realizar pedidos a los departamentos internos. Este escenario se muestra en la siguiente ilustración. 56

57 Gráfico 11 ASP.NET llama a un componente de Servicios Empresariales que, a su vez, llama a la base de datos Características Este escenario tiene las siguientes características: Los usuarios tienen Internet Explorer. Los componentes se distribuyen en el servidor Web. La aplicación maneja datos confidenciales que se deben proteger durante la transmisión. Los componentes empresariales se conectan a SQL Server mediante la autenticación de Windows. La funcionalidad empresarial de estos componentes está restringida en función de la identidad del llamador. Los componentes revisados están configurados como aplicación de servidor (fuera del proceso). Los componentes se conectan a la base de datos con la identidad del proceso de la aplicación de servidor. La suplantación está habilitada en ASP.NET (para facilitar la seguridad basada en funciones de Servicios Empresariales). 57

58 Proteger el escenario En este escenario, el servidor Web autentica el llamador original y transmite el contexto de seguridad del llamador al componente revisado. Este componente autoriza el acceso a la funcionalidad empresarial en función de la identidad del llamador original. La base de datos realiza la autenticación con la identidad del proceso de la aplicación de Servicios Empresariales (es decir, la base de datos confía en los componentes revisados de la aplicación de Servicios Empresariales). Cuando el componente revisado realiza llamadas a la base de datos, transmite la identidad del usuario en la aplicación (mediante parámetros de consulta de confianza). Tabla 2: Medidas de seguridad Categoría Detalles Autenticación Proporcione autenticación segura en el servidor Web mediante la autenticación integrada de Windows. Transmita el contexto de seguridad del llamador original al componente revisado para admitir las comprobaciones de funciones de Servicios Empresariales (COM+). Las conexiones seguras a la base de datos utilizan la autenticación de Windows. La base de datos confía en la identidad del componente revisado para que realice las llamadas de base de datos. La base de datos autentica la identidad del proceso de la aplicación de Servicios Empresariales. Autorización Autorice el acceso a la lógica empresarial mediante funciones de 58

59 Categoría Detalles Servicios Empresariales (COM+). Comunicación segura Proteja los datos confidenciales enviados entre los usuarios y la aplicación Web mediante SSL. Proteja los datos confidenciales enviados entre el servidor Web y la base de datos mediante IPSec El resultado La siguiente ilustración muestra la configuración de seguridad recomendada para este escenario. Gráfico 12 La configuración de seguridad recomendada para el escenario de intranet de ASP.NET y Servicios Empresariales locales y SQL Server 59

60 ASP.NET y Servicios Web y SQL Server En este escenario, un servidor Web que ejecuta páginas ASP.NET se conecta a un servicio Web de un servidor remoto. A su vez, este servidor se conecta a un servidor de bases de datos remoto. Como ejemplo, considere una aplicación Web general, que suministra datos confidenciales específicos de un usuario. La aplicación depende del servicio Web para la recuperación de datos. La siguiente ilustración muestra el modelo básico de este escenario de aplicaciones. Gráfico 13 ASP.NET y servicio Web remoto y SQL Server El servicio Web expone un método que permite a un empleado recuperar sus datos personales. Los datos deberán suministrarse solamente a usuarios autenticados que utilizan la aplicación Web. El servicio Web también proporciona un método que admite la recuperación de información de cualquier empleado. Esta funcionalidad deberá estar disponible únicamente para los usuarios que tengan permitido el acceso Proteger el escenario En este escenario, el servidor Web que aloja la aplicación Web ASP.NET autentica la identidad del llamador original y transmite su contexto de seguridad al servidor remoto que aloja el servicio Web. De este modo, se permite la aplicación de controles de autorización a métodos Web para permitir o denegar el acceso al llamador original. La base de datos realiza la autenticación con la identidad del proceso del servicio Web (la base de datos confía en el servicio Web). A su vez, el servicio Web realiza llamadas a la base de datos y 60

61 transmite la identidad del usuario en la aplicación mediante parámetros de procedimientos almacenados. Tabla 3: Medidas de seguridad Paso Más información Autenticación La aplicación Web autentica usuarios mediante la autenticación integrada de Windows desde IIS. El servicio Web utiliza la autenticación integrada de Windows desde IIS. Autentica el contexto de seguridad del llamador original delegado por la aplicación Web. El protocolo de autenticación Kerberos se utiliza para transmitir el contexto de seguridad del llamador original desde la aplicación Web al servicio Web mediante la delegación. La autenticación de Windows se utiliza para establecer la conexión con la base de datos mediante la cuenta del proceso de ASP.NET Autorización La aplicación Web realiza comprobaciones de funciones con el llamador original para restringir el acceso a las páginas. El acceso a los métodos del servicio Web se controla mediante el uso de funciones de.net basadas en la pertenencia a grupos de Windows del llamador original. Comunicación segura Los datos confidenciales enviados entre los llamadores originales y la aplicación Web y el servicio Web se protegen con SSL. Los datos confidenciales enviados entre el servicio Web y la base de 61

62 Paso Más información datos se protegen con IPSec El resultado La siguiente ilustración muestra la configuración de seguridad recomendada para este escenario. Gráfico 14 La configuración de seguridad recomendada para el escenario de intranet de ASP.NET y el servicio Web y SQL Server ASP.NET y Remoting y SQL Server En este escenario, un servidor Web que ejecuta páginas ASP.NET establece conexiones seguras a un componente remoto de un servidor de aplicaciones remoto. El servidor Web se comunica con el componente mediante.net Remoting por el canal HTTP. El componente remoto está alojado en ASP.NET, tal y como se muestra en la siguiente ilustración. 62

63 Gráfico 15 ASP.NET y remoting mediante.net Remoting y SQL Server Características Los usuarios tienen diversos tipos de explorador Web. El componente remoto está alojado en ASP.NET. La aplicación Web se comunica con el componente remoto mediante el canal HTTP. La aplicación ASP.NET llama al componente remoto de.net y transmite las credenciales del llamador original para la autenticación. La autenticación básica proporciona las credenciales. Los datos son confidenciales y, por lo tanto, deben protegerse entre procesos y equipos Proteger el escenario En este escenario, el servidor Web que aloja la aplicación Web ASP.NET autentica los llamadores originales. La aplicación Web puede recuperar las credenciales de autenticación del llamador (nombre de usuario y contraseña) de las variables del servidor HTTP. A continuación, puede utilizarlas para conectarse al servidor de aplicaciones que aloja el componente remoto mediante la configuración del proxy del componente remoto. La base de datos utiliza la autenticación de Windows para realizar la autenticación con la identidad del proceso de ASP.NET (es decir, la base de datos confía en el componente remoto). A su vez, el componente remoto llama a la base de datos y transmite la identidad del llamador original en la aplicación mediante parámetros de procedimientos almacenados. 63

64 Tabla 4: Medidas de seguridad Categoría Detalles Autenticación Autentique los usuarios mediante la autenticación básica desde IIS (además de SSL). Utilice la autenticación de Windows desde el componente remoto (ASP.NET/IIS). Utilice la autenticación de Windows para conectarse a la base de datos con una cuenta de ASP.NET con los mínimos privilegios. Autorización Utilice controles de ACL con el llamador original en el servidor Web. Realice comprobaciones de funciones en el componente remoto con el llamador original. Defina permisos de base de datos con la identidad de ASP.NET (componente remoto). Comunicación segura Proteja los datos confidenciales enviados entre los usuarios y la aplicación Web y los objetos remotos alojados en IIS mediante SSL. Proteja los datos confidenciales enviados entre el servidor Web y la base de datos mediante IPSec. 64

65 El resultado La siguiente ilustración muestra la configuración de seguridad recomendada para este escenario. Gráfico 16 La configuración de seguridad recomendada para el escenario de intranet de ASP.NET y el servicio Web remoto y SQL Server 3.4 ASP.net y la Seguridad Aplicaciones Web.NET Las aplicaciones Web.NET contienen características tanto lógicas como físicas. 65

66 3.4.2 Niveles lógicos La arquitectura lógica de aplicaciones considera todos los sistemas como conjuntos de servicios en cooperación que se encuentran agrupados en los niveles siguientes: Servicios de usuarios Servicios empresariales Servicios de datos El valor de este punto de vista de la arquitectura lógica radica en la identificación de los tipos genéricos de servicios que siempre están presentes en cualquier sistema, para garantizar la segmentación adecuada y para impulsar la definición de interfaces entre niveles. Esta segmentación le permite tomar decisiones más discretas acerca de la arquitectura y del diseño al implementar cada nivel, y crear una aplicación más fácil de mantener. Los niveles pueden describirse tal y como se explica a continuación: Los Servicios de usuarios se encargan de la interacción de clientes con el sistema y proporcionan un puente común a la lógica empresarial básica encapsulada por componentes del nivel de Servicios empresariales. Tradicionalmente, los Servicios de usuarios suelen asociarse a los usuarios interactivos. No obstante, también llevan a cabo el procesamiento inicial de peticiones programables de otros sistemas, en las que no participa una interfaz de usuario visible. La autenticación y la autorización, cuya naturaleza exacta varía en función del tipo de cliente, suelen realizarse en el nivel de Servicios de usuarios. Los Servicios empresariales proporcionan la funcionalidad básica del sistema y encapsulan la lógica empresarial. Son independientes del canal de entrega, de los sistemas de servidor y de los orígenes de datos. Esto ofrece la estabilidad y la flexibilidad necesarias para desarrollar el sistema de forma que admita canales y 66

67 sistemas de servidor nuevos y diferentes. Normalmente, el procesamiento de una petición empresarial concreta requiere la participación de varios componentes en colaboración del nivel de Servicios empresariales. Los Servicios de datos proporcionan acceso a datos (alojados en los límites del sistema) y a otros sistemas (de servidor) a través de interfaces genéricas que resultan sencillas de utilizar desde componentes del nivel de Servicios empresariales. Los Servicios de datos compendian la diversidad de sistemas de servidor y orígenes de datos, y encapsulan reglas de acceso y formatos de datos específicos. La clasificación lógica de los tipos de servicios de un sistema puede corresponderse con la posible distribución física de los componentes que implementan los servicios, aunque es relativamente independiente de la misma. También es importante tener en cuenta que los niveles lógicos pueden identificarse en cualquier nivel de agregación; es decir, pueden identificarse para el sistema de forma global (en el contexto de su entorno e interacciones externas) y para cualquier subsistema contenido en ellos. Por ejemplo, cada nodo remoto que aloja un servicio Web se compone de Servicios de usuarios (que se ocupan de las peticiones y los mensajes entrantes), Servicios empresariales y Servicios de datos Modelos físicos de implementación Los tres niveles de servicios lógicos descritos anteriormente no suponen la existencia de un número específico de niveles físicos. Los tres servicios lógicos pueden estar ubicados físicamente en el mismo equipo o distribuidos en diversos equipos. 67

68 3.4.4 El servidor Web como servidor de aplicaciones Un patrón de implementación habitual de las aplicaciones Web.NET está dirigido a la búsqueda de componentes empresariales y de acceso a datos en el servidor Web. De este modo se reducen al mínimo los saltos de red, lo que puede mejorar el rendimiento. Gráfico 17 Web como servidor de aplicaciones Nivel de aplicaciones remoto El nivel de aplicaciones remoto es un patrón de implementación habitual, en concreto para los escenarios de Internet en los que el nivel Web es independiente en una red perimetral (también denominada DMZ, zona desmilitarizada y subred protegida) y está separado de los usuarios finales y del nivel de aplicaciones remoto por servidores de seguridad de filtrado de paquetes. El nivel de aplicaciones remoto se muestra en la siguiente ilustración. 68

69 Gráfico 18 La introducción de un nivel de aplicaciones remoto Tecnologías de Implementación Las aplicaciones Web.NET suelen implementar uno o varios de los servicios lógicos mediante el uso de las siguientes tecnologías: ASP.NET Aplicación de Servicios Empresariales Servicios Web.NET Remoting ADO.NET y Microsoft SQL Server 2000 Seguridad del protocolo Internet (IPSec) Secure Sockets Layer (SSL) ASP.NET ASP.NET suele utilizarse para implementar Servicios de usuarios. ASP.NET proporciona una arquitectura conectable que puede utilizarse para crear páginas Web. 69

70 Servicios Empresariales La aplicación de Servicios Empresariales proporciona servicios de infraestructura a las aplicaciones. Entre ellos, figuran las transacciones distribuidas y servicios de administración de recursos como la agrupación de objetos para componentes de.net Servicios Web Los servicios Web permiten el intercambio de datos y la invocación remota de lógica de aplicaciones mediante intercambios de mensajes basados en SOAP para transmitir datos por servidores de seguridad y entre sistemas heterogéneos NET Remoting.NET Remoting proporciona un marco de trabajo para el acceso a objetos distribuidos a través de los límites de procesos y equipos ADO.NET y SQL Server 2000 ADO.NET proporciona servicios de acceso a datos. Su diseño es específico para aplicaciones Web distribuidas y ofrece compatibilidad para los escenarios inconexos que están intrínsicamente asociados a las aplicaciones Web. SQL Server proporciona seguridad integrada que utiliza los mecanismos de autenticación el sistema operativo (Kerberos o NTLM). La autorización la proporcionan los inicios de sesión y los permisos granulares que se pueden aplicar a cada uno de los objetos de base de datos. 70

71 Seguridad del protocolo Internet (IPSec) IPSec ofrece cifrado punto a punto de nivel de transporte y servicios de autenticación Secure Sockets Layer (SSL) SSL ofrece un canal de comunicación punto a punto seguro. Los datos enviados por el canal se cifran Arquitectura de Seguridad La siguiente ilustración muestra el modelo de niveles de aplicaciones remoto junto con el conjunto de servicios de seguridad proporcionados por las diversas tecnologías que se presentaron anteriormente. La autenticación y la autorización tienen lugar en muchos puntos independientes de todos los niveles. Estos servicios los proporcionan principalmente los Servicios de Internet Information Server (IIS), ASP.NET, la aplicación de Servicios Empresariales y SQL Server. Los canales de comunicación segura se aplican también en todos los niveles y se extienden desde el explorador o dispositivo cliente directamente hasta la base de datos. Los canales se protegen con una combinación de Secure Sockets Layer (SSL) o IPSec. 71

72 Gráfico 19 Arquitectura de seguridad Seguridad en los niveles Las características de autenticación, autorización y comunicación segura proporcionadas por las tecnologías mencionadas anteriormente aparecen resumidas en la siguiente tabla. 72

73 Tabla 5: Características de seguridad 73

74 Guardianes y puertas El término guardián se utiliza en el resto del documento para identificar la tecnología de la que depende una puerta. Una puerta representa un punto de control de acceso (que protege un recurso) de una aplicación. Por ejemplo, un recurso podría ser una operación (representada por un método de un objeto) o un recurso de base de datos o de sistema de archivos. Todas las tecnologías básicas mencionadas anteriormente proporcionan guardianes para la autorización de acceso. Las peticiones deben pasar por distintas puertas antes de permitírseles el acceso a la operación o al recurso solicitado. A continuación, se describen las puertas por las que deben pasar las solicitudes. IIS proporciona una puerta cuando se autentican usuarios (es decir, cuando de deshabilita la autenticación anónima). Los permisos Web de IIS pueden utilizarse como mecanismo de control de acceso para restringir la capacidad de acceso de los usuarios Web a carpetas y archivos específicos. A diferencia de los permisos de archivos NTFS, los permisos Web se aplican a todos los usuarios Web, en lugar de a usuarios o grupos individuales. Los permisos de archivos NTFS ofrecen todavía más restricciones para recursos Web tales como las páginas Web, los archivos de imagen, etc. Estas restricciones se aplican a usuarios o grupos individuales. IIS comprueba primero los permisos Web y después los permisos de archivos NTFS. El usuario debe estar autorizado por ambos mecanismos para poder obtener acceso al archivo o carpeta. ASP.NET proporciona varias puertas configurables y programables. Entre ellas figuran la autorización de direcciones URL, la autorización de archivos, las peticiones de permisos de principales y las funciones de.net. 74

75 El guardián de la aplicación de Servicios Empresariales utiliza funciones de Servicios Empresariales para autorizar el acceso a la funcionalidad empresarial. SQL Server 2000 incluye varias puertas con inicios de sesión en el servidor, inicios de sesión en la base de datos y permisos de objetos de base de datos. Los guardianes llevan a cabo la autorización en función de la identidad del usuario o del servicio que llama a la puerta e intenta obtener acceso a un recurso específico. La ventaja del uso de varias puertas reside en un mayor nivel de seguridad gracias a las múltiples líneas de defensa que proporciona. La siguiente tabla resume el conjunto de guardianes e identifica para cada uno de ellos las puertas de las que se encargan. 75

76 Tabla 6: Responsabilidades de los guardianes y las puertas que proporcionan 76

77 Al usar las distintas puertas en todos los niveles de la aplicación, puede filtrar usuarios que deben poder tener acceso a los recursos de servidor. El alcance del acceso se ve reducido por la presencia de puertas sucesivas que se vuelven cada vez más granulares a medida que la petición pasa por la aplicación a los recursos de servidor. Examinando el ejemplo de aplicación basado en Internet con IIS que se muestra en la siguiente ilustración. Gráfico 20 Filtrado de usuarios con guardianes La ilustración anterior demuestra lo siguiente: Puede deshabilitar la autenticación anónima en IIS. Como consecuencia, sólo se permite el acceso de cuentas que puede autenticar IIS. De este modo, se podría reducir el número de posibles usuarios a A continuación, se utiliza la autorización de direcciones URL en ASP.NET, lo que podría disminuir el número de usuarios a

78 La autorización de archivos podría reducir el acceso todavía más a 100 usuarios. Finalmente, el código de la aplicación Web podría permitir el acceso al recurso restringido solamente a 10 usuarios en función de la pertenencia a funciones específicas Identidades y Principales La seguridad de.net se compone de capas superpuestas sobre la seguridad de Windows. El concepto de seguridad centrado en los usuarios, en Windows, se basa en el contexto de seguridad proporcionado por una sesión de inicio, mientras que la seguridad de.net se basa en objetos IPrincipal e IIdentity. En la programación de Windows, cuando se desea conocer el contexto de seguridad en el que se ejecuta el código, se consulta la identidad del propietario del proceso o del subproceso en ejecución. Con la programación de.net, si desea consultar el contexto de seguridad del usuario actual, tendrá que recuperar el objeto IPrincipal actual de Thread.CurrentPrincipal..NET Framework utiliza objetos de identidad y de principal para representar a los usuarios mientras se ejecuta código de.net; ambos tipos de objetos constituyen la espina dorsal de la autorización basada en funciones de.net. Los objetos de identidad y de principal implementan las interfaces IIdentity e IPrincipal respectivamente. Estas interfaces se definen en el espacio de nombres System.Security.Principal. Las interfaces comunes permiten a.net Framework tratar a los objetos de identidad y de principal de modo polimórfico, independientemente de la información de implementación subyacente. 78

79 La interfaz IPrincipal le permite probar la pertenencia a funciones mediante un método IsInRole y proporciona además acceso a un objeto IIdentity asociado. public interface IPrincipal { bool IsInRole( string role ); IIdentity Identity {get;} } La interfaz IIdentity proporciona información adicional de autenticación, como el nombre y el tipo de autenticación. public interface IIdentity { string authenticationtype {get;} bool IsAuthenticated {get;} string Name {get;} }.NET Framework incluye varias implementaciones concretas de IPrincipal e IIdentity, tal y como se muestra en la ilustración 2.5, que se describen en las siguientes secciones. 79

80 Gráfico 21 Clases de implementación de IPrincipal e IIdentity WindowsPrincipal y WindowsIdentity La versión de.net de un contexto de seguridad de Windows está dividida en dos clases: WindowsPrincipal. Esta clase almacena las funciones asociadas con el usuario actual de Windows. La implementación WindowsPrincipal trata los grupos de Windows como funciones. El método IPrncipal.IsInRole devuelve "true" o "false" en función de la pertenencia del usuario a grupos de Windows. WindowsIdentity. Esta clase almacena la parte de la identidad del contexto de seguridad del usuario actual y puede obtenerse mediante el método estático WindowsIdentity.GetCurrent(). Éste devuelve un objeto WindowsIdentity con una propiedad Token que a su vez devuelve, al testigo de acceso asociado con el subproceso en ejecución, un valor de tipo IntPtr que representa un identificador de Windows. Este testigo puede pasarse entonces a funciones nativas de la interfaz de programación de aplicaciones (API) de Win32, como GetTokenInformation, 80

81 SetTokenInformation, CheckTokenMembership, etc., para recuperar información de seguridad acerca del testigo. Nota: el método estático WindowsIdentity.GetCurrent() devuelve la identidad del subproceso en ejecución, que podría tratarse o no de una suplantación. Se parece en este sentido a la API GetUserName de Win GenericPrincipal y objetos de identidad asociados Estas implementaciones son muy sencillas y las utilizan las aplicaciones que no usan la autenticación de Windows y cuando la aplicación no necesita representaciones complejas de un principal. Pueden crearse fácilmente mediante programación y, por lo tanto, deberá existir un cierto grado de confianza cuando una aplicación use un objeto GenericPrincipal. Si va a basarse en el uso del método IsInRole de GenericPrincipal para tomar decisiones de autorización, deberá confiar en la aplicación que le envía el objeto GenericPrincipal. Esto contrasta con el uso de objetos WindowsPrincipal, con los que debe confiar en que el sistema operativo proporcione un objeto WindowsPrincipal válido con una identidad autenticada y nombres de grupo o de función válidos. Los tipos siguientes de objeto de identidad pueden asociarse a la clase GenericPrincipal: FormsIdentity. Esta clase representa a una identidad que se ha autenticado con la autenticación mediante Formularios. Contiene un FormsAuthenticationTicket que a su vez contiene información acerca de la sesión de autenticación del usuario. PassportIdentity. Esta clase representa a una identidad que se ha autenticado mediante la autenticación de Passport y que contiene información de perfil de Passport. 81

82 GenericIdentity. Esta clase representa a un usuario lógico que no está asociado a ninguna tecnología de sistema operativo concreta y que se suele utilizar de forma conjunta con mecanismos de autenticación y autorización personalizados ASP.NET y HttpContext.User Normalmente, Thread.CurrentPrincipal se comprueba en el código de.net antes de tomar cualquier decisión de autorización. No obstante, ASP.NET proporciona el contexto de seguridad del usuario autenticado mediante HttpContext.User. Esta propiedad acepta y devuelve una interfaz IPrincipal. La propiedad contiene un usuario autenticado para la petición actual. ASP.NET recupera HttpContext.User cuando toma decisiones de autorización. Al utilizar la autenticación de Windows, el módulo de autenticación de Windows construye de forma automática un objeto WindowsPrincipal y lo almacena en HttpContext.User. Si utiliza otros mecanismos de autenticación, como Formularios o Passport, deberá construir un objeto GenericPrincipal y almacenarlo en HttpContext.User Identidades de ASP.NET En cualquier punto de la ejecución de una aplicación Web ASP.NET, pueden estar presentes varias identidades durante una sola petición. Entre estas identidades, figuran: HttpContext.User devuelve un objeto IPrincipal que contiene información de seguridad para la petición Web actual. Se trata del cliente Web autenticado. WindowsIdentity.GetCurrent() devuelve la identidad del contexto de seguridad del subproceso de Win32 en ejecución. Esta identidad es siempre ASPNET de forma 82

83 predeterminada, que es la cuenta predeterminada que se utiliza para ejecutar aplicaciones Web ASP.NET. No obstante, si la aplicación Web se ha configurado para la suplantación, la identidad representa al usuario autenticado (que es IUSR_EQUIPO, si está activada la autenticación anónima de IIS). Thread.CurrentPrincipal devuelve el principal del subproceso de.net en ejecución que se superpone al subproceso de Win Remoting y Servicios Web En la versión actual de.net Framework, Remoting y los servicios Web no tienen su propio modelo de seguridad. Ambos heredan las características de seguridad de IIS y ASP.NET. Aunque la arquitectura de remoting no tiene integrada la seguridad, sí que se diseñó teniendo en cuenta la seguridad. La incorporación de determinados niveles de seguridad en las aplicaciones de remoting depende del desarrollador o del administrador. El paso de objetos de principal a través de los límites de remoting depende de la ubicación del cliente y del objeto remoto. Por ejemplo: Remoting en el mismo proceso. Cuando remoting se utiliza entre objetos del mismo dominio o dominios de aplicación o entre dominios independientes, la infraestructura de remoting copia en el contexto del receptor una referencia al objeto IPrincipal asociado con el contexto del llamador. Remoting entre procesos. En este caso, los objetos IPrincipal no se transmiten de un proceso a otro. Las credenciales utilizadas para construir el objeto IPrincipal original deben transmitirse al proceso remoto, que puede estar ubicado en un equipo independiente. Esto permite al equipo remoto construir un objeto IPrincipal adecuado basado en las credenciales suministradas. 83

84 CAPITULO 4 DISEÑO Y CONSTRUCCIÓN DEL SISTEMA 84

85 4.1 MODELAMIENTO DE LA BASE DE DATOS (ENTIDAD RELACION) La Base de Datos del Sistema Médico MedNet se compone de las siguientes tablas, las mismas que se encuentran relacionadas entre sí, reflejando la necesidad del negocio. Las tablas normalizadas del sistema son: NOMENCLATURA NOMBRE DESCRIPCIÓN PCNT Paciente Esta tabla guarda la información de la cédula del usuario. INFR Informe Esta tabla guarda la información de los informes que tiene un paciente. HSCL Historia Clínica Esta tabla guarda la información de la HC del paciente CNST Consulta Esta tabla guarda la información de las consultas realizadas por los usuarios. USRO Usuario Esta tabla guarda la información de los usuarios. CITA Cita Esta tabla guarda la información de las citas realizadas por los usuarios. Esta tabla guarda la información de los DPTR Departamento departamentos del COSENA CRGO Cargo Esta tabla guarda la información de los cargos respectivos de los usuarios. HORA Horario Esta tabla guarda la información de los horarios disponibles para la atención de pacientes. Tabla 7: Descripción Tablas del sistema 85

86 HSCL CNST CDGO CNST DSCR CNST <pi> CNST CDGO <pi> I <M > VA40 <M > SOLICIT A PCNT PCNT CDGO <pi> I <M > PCNT CDGO <pi> ES_UN USRO USROCDLA <pi> USRONM BR USROAPLL USRODRCC USROT LFN USROFCNC USROSEXO USROIESS USROT IPO USROESCV USROCRFM USROCNT R USROM AIL USROFOT O USROCDLA <pi> VA10 VA30 VA30 VA50 I VA10 VA1 VA15 VA15 VA15 I VA15 VA40 PIC1 POSEE1 <M> <M> <M> <M> <M> INFRCDGO INFRFCHA INFRDT LL INFR <pi> INFRCDGO <pi> RESERVAR I D VA500 <M > <M > <M > POSEE CITA CIT ACDGO <pi> I CIT AM T VO CIT APRRD CIT AFCHA CIT ACNFR CIT ACDGO <pi> VA200 VA10 VA10 VA10 <M > <M > <M > <M > HSCLCDGO HSCLANT C HSCLOT EN HSCLINM N HSCLENIN HSCLHSPT HSCLEM BR HSCLPRT S HSCLABRT HSCLACT R HSCLHBT S HSCLANFM HSCLANM N HSCLCNST HSCLNT RC HSCLEST T HSCLPESO HSCLT M BC HSCLPLSO HSCLSST L HSCLDST L HSCLMDIA HSCLPLM C HSCLCBZA HSCLCLLO HSCLGRGN HSCLOJOS HSCLNRIZ HSCLODOS HSCLBOCA HSCLDNT D HSCLT RAX HSCLCRZN HSCLPLM N HSCLMNOS HSCLABDM HSCLMSPL HSCLSNGR HSCLVDRL HSCLGLSM HSCLORNA HSCLCPRP HSCLFT FL HSCLRDLG HSCLESSL <pi> I VA40 VA40 VA40 VA40 I I I I VA40 VA40 VA40 VA40 VA40 VA40 F3 F3 F3 F3 I I I VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 <M > HSCLCDGO <pi> REQUIERE PERT ENECE DESEM PENA DPRT DPRT CDGO <pi> I <M > DPRT NM BR VA40 <M > DPRT DSCR VA40 DPRT CDGO <pi> CRGOCDGO CRGODSCR CRGO <pi> CRGOCDGO <pi> I <M> VA40 <M> HORACDGO HORADSCR HORA <pi> CDGOHORA <pi> I <M > VA11 <M > Diagrama 4 "Diseño Lógico Del Sistema Médico MedNet 86

87 CNST CNST CDGO int <pk> PCNT CDGO int <fk> CNST DSCR varchar(40) FK_CNST _SOLICIT A_PCNT PCNT CDGO USROCDLA PCNT FK_PCNT _ES_UN_USRO USROCDLA DPRT CDGO CRGOCDGO USRONM BR USROAPLL USRODRCC USROT LFN USROFCNC USROSEXO USROIESS USROT IPO USROESCV USROCRFM USROCNT R USROM AIL USROFOT O FK_INFR_POSEE1_PCNT int <pk> varchar(10) <fk> USRO varchar(10) int int varchar(30) varchar(30) varchar(50) int varchar(10) varchar(1) varchar(15) varchar(15) varchar(15) int varchar(15) varchar(40) im age <pk> <fk1> <fk2> INFR INFRCDGO PCNT CDGO INFRFCHA INFRDT LL int int datetim e varchar(500) <pk> <fk> FK_CIT A_RESERVAR_USRO FK_HSCL_POSEE_PCNT CIT ACDGO USROCDLA HORACDGO CIT AM T VO CIT APRRD CIT AFCHA CIT ACNFR CITA int varchar(10) int varchar(200) varchar(10) varchar(10) varchar(10) <pk> <fk1> <fk2> HSCLCDGO PCNT CDGO HSCLANT C HSCLOT EN HSCLINM N HSCLENIN HSCLHSPT HSCLEM BR HSCLPRT S HSCLABRT HSCLACT R HSCLHBT S HSCLANFM HSCLANM N HSCLCNST HSCLNT RC HSCLEST T HSCLPESO HSCLT M BC HSCLPLSO HSCLSST L HSCLDST L HSCLM DIA HSCLPLM C HSCLCBZA HSCLCLLO HSCLGRGN HSCLOJOS HSCLNRIZ HSCLODOS HSCLBOCA HSCLDNT D HSCLT RAX HSCLCRZN HSCLPLM N HSCLM NOS HSCLABDM HSCLM SPL HSCLSNGR HSCLVDRL HSCLGLSM HSCLORNA HSCLCPRP HSCLFT FL HSCLRDLG HSCLESSL HSCL int <pk> int <fk> varchar(40) varchar(40) varchar(40) varchar(40) int int int int varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) float(3) float(3) float(3) float(3) int int int varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) FK_CIT A_REQUIERE_HORA FK_USRO_PERT ENECE_DPRT FK_USRO_DESEM PENA_CRGO DPRT DPRT CDGO int <pk> DPRT NM BR varchar(40) DPRT DSCR varchar(40) CRGOCDGO CRGODSCR CRGO int <pk> varchar(40) HORACDGO HORADSCR HORA int <pk> varchar(11) Diagrama 5 Diseño Físico Del Sistema Médico MedNet 87

88 4.1.3 Creación de Dominios Todos los atributos de este Proyecto funcionan a base de dominios los cuales son: USUARIO (USRO) DOMINIO NOMBRE CODIGO TIPO DE DATO Cédula USROCDLA USROCDLA VA10 Nombre USRONMBR USRONMBR VA30 Apellido USROAPLL USROAPLL VA30 Dirección USRODRCC USRODRCC VA50 Teléfono USROTLFN USROTLFN I Fecha Nacimiento USROFCNC USROFCNC VA10 Sexo USROSEXO USROSEXO VA1 Nro. IESS USROIESS USROIESS VA15 Tipo USROTIPO USROTIPO VA15 Estado Civil USROESCV USROESCV VA15 Cargas Familiares USROCRFM USROCRFM I Contraseña USROCNTR USROCNTR VA15 Correo electrónico USROMAIL USROMAIL VA40 Foto USROFOTO USROFOTO PIC1 Tabla 8 Descripción Tabla Usuario DEPARTAMENTO (DPRT) DOMINIO NOMBRE CODIGO TIPO DE DATO Código DPRTCDGO DPRTCDGO I Nombre DPRTNMBR DPRTNMBR VA40 Descripción DPRTDSCR DPRTDSCR VA40 Tabla 9 Descripción Tabla Departamento CARGO (CDGO) DOMINIO NOMBRE CODIGO TIPO DE DATO Código CRGOCDGO CRGOCDGO I Descripción CRGODSCR CRGODSCR VA40 Tabla 10 Descripción Tabla Cargo HORARIO (HORA) DOMINIO NOMBRE CODIGO TIPO DE DATO Código HORACDGO HORACDGO I Descripción HORADSCR HORADSCR VA11 Tabla 11 Descripción Tabla Hora 88

89 CITA (CITA) DOMINIO NOMBRE CODIGO TIPO DE DATO Código CITACDGO CITACDGO I Motivo CITAMTVO CITAMTVO VA200 Prioridad CITAPRRD CITAPRRD VA10 Fecha CITAFCHA CITAFCHA VA10 Confirmación CITACNFR CITACNFR VA10 Tabla 12 Descripción Tabla Cita PACIENTE (PCNT) DOMINIO NOMBRE CODIGO TIPO DE DATO Código PCNTCDGO PCNTCDGO I Tabla 13 Descripción Tabla Paciente INFORME (INFR) DOMINIO NOMBRE CODIGO TIPO DE DATO Código INFRCDGO INFRCDGO I Fecha INFRFCHA INFRFCHA D Detalle INFRDTLL INFRDTLL VA500 Tabla 14 Descripción Tabla Informe CONSULTA (CNST) DOMINIO NOMBRE CODIGO TIPO DE DATO Código CNSTCDGO CNSTCDGO I Descripción CNSTDSCR CNSTDSCR VA40 Tabla 15 Descripción Tabla Consulta 89

90 HISTORIA CLINICA (HSCL) DOMINIO NOMBRE CODIGO TIPO DE DATO Código HSCLCDGO HSCLCDGO I Antecedentes HSCLANTC HSCLANTC VA40 Otras Enfermedades HSCLOTEN HSCLOTEN VA40 Inmunizaciones Recibidas HSCLINMN HSCLINMN VA40 Enfermedades infancia HSCLENIN HSCLENIN VA40 Hospitalizaciones HSCLHSPT HSCLHSPT I Embarazos HSCLEMBR HSCLEMBR I Partos HSCLPRTS HSCLPRTS I Abortos HSCLABRT HSCLABRT I Accidentes trabajo HSCLACTR HSCLACTR VA40 Hábitos HSCLHBTS HSCLHBTS VA40 Antecedentes familiares HSCLANFM HSCLANFM VA40 Historia actual HSCLANMN HSCLANMN VA40 Constitución HSCLCNST HSCLCNST VA40 Estado nutricional HSCLNTRC HSCLNTRC VA40 Estatura HSCLESTT HSCLESTT F3 Peso HSCLPESO HSCLPESO F3 Temperatura bucal HSCLTMBC HSCLTMBC F3 Pulso HSCLPLSO HSCLPLSO F3 Sistólica HSCLSSTL HSCLSSTL I Diastólica HSCLDSTL HSCLDSTL I Media HSCLMDIA HSCLMDIA I Piel y mucosas HSCLPLMC HSCLPLMC VA40 Cabeza HSCLCBZA HSCLCBZA VA40 Cuello HSCLCLLO HSCLCLLO VA40 Garganta HSCLGRGN HSCLGRGN VA40 Ojos HSCLOJOS HSCLOJOS VA40 Nariz HSCLNRIZ HSCLNRIZ VA40 Oidos HSCLODOS HSCLODOS VA40 Boca HSCLBOCA HSCLBOCA VA40 Dentadura HSCLDNTD HSCLDNTD VA40 Tórax HSCLTRAX HSCLTRAX VA40 Corazón HSCLCRZN HSCLCRZN VA40 Pulmones HSCLPLMN HSCLPLMN VA40 Manos HSCLMNOS HSCLMNOS VA40 Abdomen HSCLABDM HSCLABDM VA40 Masas palpables HSCLMSPL HSCLMSPL VA40 Sangre biometría HSCLSNGR HSCLSNGR VA40 VDRL HSCLVDRL HSCLVDRL VA40 Glicemia HSCLGLSM HSCLGLSM VA40 Orina HSCLORNA HSCLORNA VA40 Coproparasitario HSCLCPRP HSCLCPRP VA40 Fotofluorografía HSCLFTFL HSCLFTFL VA40 Examenes radiológicos HSCLRDLG HSCLRDLG VA40 Estado Salud HSCLESSL HSCLESSL VA40 90

91 4.1.4 Diccionario de Datos USUARIO (USRO) El dominio CEDULA es el atributo que hace referencia al número de Cédula de Identidad que identifica a cada usuario y a las claves primarias del sistema médico. El dominio NOMBRE es el atributo que hace referencia al nombre del usuario y/o paciente. El dominio APELLIDO es el atributo que hace referencia al nombre del usuario y/o paciente. El dominio DIRECCIÓN es el atributo que hace referencia a la dirección del usuario y/o paciente. El dominio TELÉFONO es el atributo que hace referencia al teléfono del usuario y/o paciente. El dominio FECHA NACIMIENTO es el atributo que hace referencia a la fecha de nacimiento del usuario y/o paciente. El dominio SEXO es el atributo que hace referencia al sexo del usuario y/o paciente. El dominio NÚMERO IESS es el atributo que hace referencia al número del IESS del usuario y/o paciente. El dominio TIPO DE USUARIO es el atributo que hace referencia al tipo de usuario que es, he identificar los permisos de acceso que posee. El dominio ESTADO CIVIL es el atributo que hace referencia al estado civil del usuario y/o paciente. El dominio CARGAS FAMILIARES es el atributo que hace referencia al número de hijos que tiene el usuario y/o paciente. El dominio CONTRASEÑA es el atributo que hace referencia a la contraseña del usuario y/o paciente para que pueda acceder a la intranet. El dominio CORREO ELECTRÓNICO es el atributo que hace referencia al mail del usuario y/o paciente a donde llegaran las notificaciones de las citas establecidas. El dominio FOTO es el atributo que hace referencia a la foto que puede tener el usuario y/o paciente. 91

92 DEPARTAMENTO (DPRT) El dominio CÓDIGO es el atributo que hace referencia a todos los códigos o claves primarias que tendrá la tabla departamento. El dominio DESCRIPCIÓN es el atributo que hace referencia a la descripción de los diferentes departamentos que conforman el COSENA. CARGO (CDGO) El dominio CÓDIGO es el atributo que hace referencia a todos los códigos o claves primarias que tendrá la tabla cargo. El dominio DESCRIPCIÓN es el atributo que hace referencia a la descripción de los diferentes cargos que tienen los usuarios en el COSENA. HORARIO (HORA) El dominio CÓDIGO es el atributo que hace referencia a todos los códigos o claves primarias que tendrá la tabla hora. El dominio DESCRIPCIÓN es el atributo que hace referencia a la descripción de los diferentes horarios en los que atenderá el médico a sus pacientes. CITA (CITA) El dominio CÓDIGO es el atributo que hace referencia a todos los códigos o claves primarias que tendrá la tabla cita. El dominio MOTIVO es le atributo que hace referencia a la razón por las cual el usuario solicita una cita con el médico. El dominio PRIORIDAD es le atributo que hace referencia al grado de prioridad o de urgencia que tenga el usuario de ser atendido por el médico. 92

93 El dominio FECHA es el atributo que hace referencia a la fecha en la que se realizan las citas, exámenes o registros en general. El dominio CONFIRMACIÓN es el atributo que hace referencia a la aceptación que realiza el médico ante la solicitud de cita por parte del usuario. PACIENTE (PCNT) El dominio CÓDIGO es el atributo que hace referencia a todos los códigos o claves primarias que tendrá la tabla paciente. INFORME (INFR) El dominio CÓDIGO es el atributo que hace referencia a todos los códigos o claves primarias que tendrá la tabla informe. El dominio FECHA es el atributo que hace referencia a la fecha en la que el médico realiza los informes de sus pacientes. El dominio DETALLE es le atributo que hace referencia al detalle del informe médico que el médico realiza a sus pacientes. CONSULTA (CNST) El dominio CÓDIGO es el atributo que hace referencia a todos los códigos o claves primarias que tendrá la tabla consulta. El dominio DESCRIPCIÓN es el atributo que hace referencia a la descripción de las diferentes consultas que realizan los usuarios. 93

94 HISTORIA CLÍNICA (HSCL) El dominio CÓDIGO es el atributo que hace referencia a todos los códigos o claves primarias que tendrá la tabla Historia Clínica. El dominio ANTECEDENTES PERSONALES es el atributo que hace referencia a los antecedentes personales que pueda tener el paciente al momento de hacerse un examen. (Esta información es parte del formulario que el médico realiza como procedimiento para la realización de un examen). El dominio OTRAS ENFERMEDADES es el atributo que hace referencia a otras posibles enfermedades que pudiera tener o haber tenido el paciente en el transcurso de su vida y que son importantes registrarlas. El dominio INMUNIZACIONES RECIBIDAS es el atributo que hace referencia a todas las vacunas y tratamientos que el paciente ha recibido en el transcurso de su vida. El dominio ENFERMEDADES INFANCIA es el atributo que hace referencia a todas las enfermedades que el paciente ha sufrido en el periodo de su niñez. El dominio HOSPITALIZACIONES es el atributo que hace referencia a todas las hospitalizaciones que el paciente ha tenido en el transcurso de su vida. El dominio EMBARAZOS es el atributo que hace referencia a todos los embarazos que el paciente ha tenido en el transcurso de su vida. El dominio PARTOS es el atributo que hace referencia a todos los partos que el paciente ha tenido en el transcurso de su vida. El dominio ABORTOS es el atributo que hace referencia a todos los abortos que el paciente ha tenido en el transcurso de su vida. El dominio ACCIDENTES TRABAJO es el atributo que hace referencia a todos los accidentes laborales que el paciente ha sufrido en el transcurso de su vida. El dominio HABITOS es el atributo que hace referencia a todos los malos hábitos que pueda tener el paciente. 94

95 El dominio ANTECEDENTES FAMILIARES es el atributo que hace referencia a todos los antecedentes que el paciente puede tener con relación a su familia más cercana. El dominio HISTORIA ACTUAL es el atributo que hace referencia a los últimos estados del paciente, sus síntomas, malestares y molestias que pudiera estar sintiendo en los últimos días y/o semanas. El dominio CONSTITUCIÓN es el atributo que hace referencia a la constitución física que el paciente posee actualmente. El dominio ESTADO NUTRICIONAL es el atributo que hace referencia al estado nutricional que actualmente tiene el paciente. El dominio ESTATURA es el atributo que hace referencia a la estatura que posee el paciente. El dominio PESO es el atributo que hace referencia al peso que posee el paciente. El dominio TEMPERATURA BUCAL es el atributo que hace referencia a la temperatura bucal interna que tiene el paciente. El dominio PULSO es el atributo que hace referencia al pulso actual que tiene el paciente al momento de hacerse un examen. (Esta información es parte del formulario que el médico realiza como procedimiento para la realización de un examen). El dominio SISTÓLICA es el atributo que hace referencia a la tensión arterial máxima que posee el paciente. El dominio DIASTÓLICA es el atributo que hace referencia a la tensión arterial mínima que posee el paciente. El dominio MEDIA es el atributo que hace referencia al promedio de la tensión arterial que posee el paciente. El dominio PIEL Y MUCOSAS es el atributo que hace referencia al estado en el que se encuentra la piel y mucosas del paciente. El dominio CABEZA es el atributo que hace referencia al estado actual de la cabeza del paciente. 95

96 El dominio CUELLO es el atributo que hace referencia al estado actual del cuello del paciente. El dominio GARGANTA es el atributo que hace referencia al estado actual de la garganta del paciente. El dominio OJOS es el atributo que hace referencia al estado actual de los ojos del paciente. El dominio NARIZ es el atributo que hace referencia al estado actual de la nariz del paciente. El dominio OÍDOS es el atributo que hace referencia al estado actual de los oídos del paciente. El dominio BOCA es el atributo que hace referencia al estado actual de la boca del paciente. El dominio DENTADURA es el atributo que hace referencia al estado actual de la dentadura del paciente. El dominio TÓRAX es el atributo que hace referencia al estado actual del tórax del paciente. El dominio CORAZÓN es el atributo que hace referencia al estado y funcionamiento actual del corazón del paciente. El dominio PULMONES es el atributo que hace referencia al estado y funcionamiento actual de los pulmones del paciente. El dominio MANOS es el atributo que hace referencia al estado actual de las manos del paciente. El dominio ABDOMEN es el atributo que hace referencia al estado actual del abdomen del paciente. El dominio MASAS PALPABLES es el atributo que hace referencia al estado actual de las masas palpables que tiene el paciente. El dominio SANGRE BIOMETRÍA es el atributo que hace referencia a los diferentes valores de los tipos de células en la sangre, los mismos que el médico comparará con los niveles normales. El dominio VDRL es el atributo que hace referencia al estado del paciente con relación a enfermedades venéreas que pueda presentar. 96

97 El dominio GLICEMIA es el atributo que hace referencia a los niveles de azucares en la sangre que tiene el paciente. El dominio ORINA es el atributo que hace referencia a los diferentes componentes PH que el paciente presente por medio de la orina. El dominio COPROPARASITARIO es el atributo que hace referencia a los diferentes componentes parasitarios que el paciente presente actualmente. El dominio FOTOFLUOROGRAFIA es el atributo que hace referencia a los resultados de las radiografías que tiene el paciente. El dominio EXÁMENES RADIOLÓGICOS es el atributo que hace referencia a los resultados de los exámenes sobre radiografías, ecos, tomografías, etc., que tiene el paciente. El dominio ESTADO SALUD es el atributo que hace referencia al estado actual de salud que tiene el paciente, es decir, como se encuentra actualmente. 97

98 4.2 CONSTRUCCIÓN DE INTERFACES A continuación presentaremos cada modulo del sistema por medio de la captura de pantallas con la finalidad de explicar el funcionamiento detallado de cada interfase grafica que compone el sistema. Imagen 1 "Pantalla Login del Sistema" La primera pantalla cuando accedemos al sistema por medio de la pagina informativa (index) que se encuentra cargada en la intranet del COSENA será la del login, pantalla en la cual podremos ingresar nuestra cedula y contraseña siempre y cuando tengamos ya creada nuestra cuenta de usuario, caso contrario tendremos que ingresar nuestra cedula únicamente y posteriormente crear nuestra contraseña, con este proceso internamente en la base de datos estamos creando un usuario para posteriormente ingresar normalmente. 98

99 Al tener una cuenta valida podremos ingresar a 3 diferente módulos dependiendo del tipo de usuario que seamos, existen 3 diferentes usuarios que podrán acceder al sistema. Usuario Administrador: Será el encargado de crear cuentas y dar privilegios a los demás usuarios comunes, la persona que tendrá una cuenta de Administrador pertenecerá al departamento de Sistemas del COSENA. Usuario Avanzado: Será el encargado de administrar la información de los pacientes, la persona que tendrá una cuenta de Avanzado pertenecerá al departamento Medico del COSENA. Usuario Básico: Representado por cada uno de los pacientes, las personas que ingresen por medio de esta cuenta tendrán el accesos a toda la información personal y medica como son historia clínica, historial de informes emitidos por el medico, citas, etc. A continuación accederemos al por medio de una cuenta Administrador. Imagen 2 "Pantalla de Menú Principal del Administrador" 99

100 Como se puede observar la interfase nos muestra claramente el nombre del usuario que accedió y las opciones que tengo disponibles en base a los privilegios otorgados. Como administrador tendré las opciones de administrar usuarios es decir poder crearlos, editarlos o eliminarlos. Y como segunda opción consulta de usuarios que me permitirá obtener toda la información de cualquier usuario registrado en la base de datos. Imagen 3 "Pantalla de Administrador de Usuarios" 100

101 Imagen 4 "Pantalla de Consulta de Usuarios" En esta opción podré consultar cualquier usuario registrado en la base de datos, la consulta la puedo filtrar por cédula o apellido. Si selecciono un usuario automáticamente se me cargan los datos de ese usuario. 101

102 Imagen 5 "Pantalla de Datos Personales de usuario" 102

103 La siguiente pantalla muestra el menú correspondiente a un usuario Avanzado es decir el Medico. Imagen 6 "Pantalla Menú Avanzado" En este modulo tendremos las opciones de consultar pacientes, consultar citas y aceptarlas o rechazarlas, realizar recetas e imprimirlas, crear o editar historias clínicas, redactar instrucciones para exámenes e imprimirlas, redactar informes de salud del paciente. 103

104 Imagen 7 "Pantalla de Consulta de Citas" 104

105 Imagen 8 "Pantalla de Receta" 105

106 Imagen 9 "Pantalla de Historia Clínica" 106

107 Imagen 10 "Pantalla Examen Médico" 107

108 Imagen 11 "Pantalla Informe Medico" Por ultimo tenemos el menú de usuario básico que pertenecerá a todos los pacientes del COSENA. Dentro de este menú tenemos las opciones de Verificar nuestros datos personales, consultar nuestra historia clínica, realizar citas dinámicamente, tener un historial de todas las citas que el paciente ha realizado, tener un historial de los informes que el doctor me ha emitido en cada una de las citas guardadas. 108

109 Imagen 12 "Pantalla Menú Básico" 109

110 Imagen 13 "Pantalla Citas" 110

111 Imagen 14 "Pantalla Historial de Citas" 111

112 Imagen 15 "Pantalla Informes" En definitiva las pantallas capturadas corresponden a los diferentes módulos que tiene el sistema y que se encuentran habilitados según el tipo y privilegios que tenga el usuario. El funcionamiento de cada uno de los módulos más detalladamente lo podremos encontrar en el manual de usuario, el cual nos guiara en el correcto funcionamiento del sistema. 112

113 4.3 PROGRAMACION DE CONTROLES WEB A continuación vamos a detallar los controles web que se han utilizado en el Sistema para proveer de mayor funcionalidad al sistema Control ToolTip.- Por medio de este control podemos desplegar un mensaje informativo de Ayuda cuando el usuario pase el mouse sobre la imagen representativa, de esta forma creamos un ambiente mas amigable para que el usuario en caso de que no pueda interactuar correctamente con el sistema por medio de la ayuda tenga una mejor orientación. Imagen 16 "Pantalla Control Web ToolTip" 113

114 4.3.2 Control Calendar.- Para realizar una cita era primordial mostrar un calendario para que el usuario pueda manejar de mejor forma su reservación, para esto implementamos el Control Web Calendar. Imagen 17 "Pantalla Control Web Calendar" Control GridView.- Para desplegar la información al realizar una consulta como por ejemplo las citas que están reservadas en el menú de Consultas Citas hemos utilizado el Control Web GridView el cual permite desplegar en una tabla y bien detallada la información almacenada. 114

115 Imagen 18 "Pantalla Control Web GridView" Control SqlDataSource.- Para cargar información almacenada en la Base de Datos utilizamos el control SqlDataSource que nos permite desplegar información validando ciertos parámetros, si se cumplen con las validaciones que en este caso es la cedula del paciente podemos cargar información asociada a dicha cedula. 115

116 Imagen 19 "Pantalla Control Web SqlDataSource" Control DropDownList.- Este control es muy similar al control ListBox, la diferencia i la decisión de usar uno o el otro es el espacio para el diseño y el tipo de selección. Si no hay suficiente espacio en la aplicación puede ser mejor usar un DropDownlist. Para nuestro sistema hemos considerado usar DropDownList para desplegar todos los usuarios del sistema que se encuentran activos. 116

117 Imagen 20 "Pantalla Control Web DropDownList" Estos Controles Web que se han detallado son los más representativos del sistema y gracias a la funcionalidad de cada uno de ellos podemos crear sistemas mas confiables y fáciles de usar. 117

118 4.4 SEGURIDADES ADMINISTRACIÓN DE USUARIOS El objetivo de los usuarios, grupos y permisos en un proyecto es el de brindar privacidad y organización permitiendo también compartir información cuando así se desea. Con respecto a usuarios el administrador puede crear, eliminar o modificar información de los usuarios que vayan a utilizar el sistema, el será la única persona que tenga permisos de escritura en ciertos módulos del sistema con lo que se resguarda la información y se limita el manipular la misma a cualquier persona que no tenga una identificación de administrador. La seguridad en el proceso de desarrollo de un proyecto de software es un tema amplio. En este capitulo nos vamos a enfocar en la definición y la discusión de la seguridad de software, confiabilidad del software, la responsabilidad del desarrollador y de la responsabilidad del usuario, por medio de una correcta administración de usuarios. La seguridad de software aplica los principios de la seguridad de información al desarrollo de software. La seguridad de información se refiere a la seguridad de información comúnmente como la protección de sistemas de información contra el acceso desautorizado o la modificación de información, si esta en una fase de almacenamiento, procesamiento o tránsito. También la protege contra la negación de servicios a usuarios desautorizados y la provisión de servicio a usuarios desautorizados, incluyendo las medidas necesarias para detectar, documentar y bloquear tales amenazas. Muchas preguntas con respecto a la seguridad, son relacionadas al ciclo vital de software. En particular, la seguridad del código y el proceso de software; deben de ser considerados durante la fase del diseño y desarrollo. Además, la seguridad debe de ser preservada durante la operación y el mantenimiento para asegurar la integridad de una parte del software. 118

119 La falta de seguridad se origina en dos problemas fundamentales: Los sistemas que son teóricamente seguros pueden ser inseguros en la práctica, Además los sistemas son cada vez más complejos. La complejidad proporciona más oportunidades para los ataques. La seguridad requiere más manejo y riesgo de mitigación, de la que requiere la tecnología. Como un desarrollador, uno primero debe de determinar los riesgos de una aplicación particular. Por ejemplo, el Web Site típico de hoy puede ser sujeto de una variedad de riesgos; la desfiguración o la negación distribuida de ataques del servicio. Una vez que se identifiquen los riesgos, identificar medidas de seguridad apropiadas llega a ser manejable. En particular, al definir los requisitos, es importante considerar cómo la aplicación será utilizada. La confiabilidad de software significa que un programa particular debe de seguir funcionando en la presencia de errores. Los errores pueden ser relacionados al diseño, a la implementación, a la programación, o el uso de errores. Así como los sistemas llegan a ser cada vez más complejos, aumenta la probabilidad de errores. Entre las principales seguridades con que cuenta el sistema son las siguientes: 1.- Una vez realizado el link respectivo desde la página web informativa, se ingresa a la interfase de registro, en donde el usuario tiene que ingresar su cédula de identidad y su password respectivo. Este método de seguridad es uno de las más comunes y seguros. 119

120 Imagen 21 "Pantalla de Login" 2.- Cada módulo posee validaciones de seguridad para los URL, es decir un usuario que se encuentra registrado no podrá cambiarse a otra página web del sistema MedNet a través de la barra de dirección. Partial Class Permission Inherits System.Web.UI.Page End Class 3.- La expiración de la página debido a que no se realiza ninguna tarea por más de 5 minutos activa el componente en donde informa al usuario que debe volver a registrase. Partial Class ExpiringSession Inherits System.Web.UI.Page End Class 120

121 4.- Dentro del formulario de ingreso de Datos Personales en el módulo Administrador, se cuenta con varias validaciones entre las que se destaca: Ingreso erróneo del correo electrónico. Ingreso erróneo del número telefónico Estructuración de Usuarios en El sistema se compone de 3 tipos de usuarios. Administrador Avanzado Básico Sistemas Administrador de Red/Intranet Médico Administrador de Aplicación Usuario final Paciente Diagrama 6 "Estructuración de Usuarios en " Usuario Administrador: El perfil de usuario Administrador permite la administración de todos los usuarios del sistema, tiene los privilegios suficientes para crear un nuevo usuario estableciendo su categorización, y además puede visualizar la información personal completa. Usuario Avanzado: El perfil de usuario Avanzo tiene el perfil del Médico o administrador de la aplicación. Es el módulo más completo debido a que es la esencia del negocio. Usuario Básico: El perfil de usuario Básico es el perfil común que manejarán la mayoría de los usuarios. En este perfil los usuarios pueden consultar sus Datos Personales, sus Historias Clínicas, la reservación y el historial de Citas, sus informes finales, etc. 121

122 4.5 CONEXIONES ODBC Como introducción podemos citar que ODBC (Open DataBase Connectivity) es un estándar de acceso a una base de datos, el objetivo de una ODBC es hacer posible el acceder a cualquier dato desde cualquier aplicación, sin importar que gestor de base de datos los este almacenando. La cadena de conexión utilizada en el sistema MedNet, se basa en un estándar de conexión, donde se establece el nombre de servidor y el nombre de la Base de Datos. sqlconnection = New SqlConnection("server=user;database=CLINICA;Trusted_Connection=yes") Esta cadena de conexión se establece para cada módulo del sistema y nos permite establecer una comunicación directa con el la base de datos creada en SQL Server

123 CAPITULO 5 ANÁLISIS DE DEFECTOS Y CALIDAD DEL PRODUCTO 123

124 5.1 DEFECTOS EN EL PRODUCTO Cuando se empieza con la construcción de un proyecto de software en nuestro caso, tenemos que tener en cuenta los errores y defectos que se nos van a ir presentando conforme avance la construcción del sistema. Este capítulo esta enfocado a esos errores y defectos que podríamos decir son imposibles de evitarlos ya que el desarrollo de sistemas confiables con estructuras bien definidas y sólidas siempre van a presentar errores en su etapa de construcción, posiblemente ligados a la complejidad del sistema como tal. Viendo de otra perspectiva, estos errores nos permiten ver las falencias de nuestro sistema y de esta forma corregirlos e ir conociendo más las fortalezas y debilidades que tenga nuestro proyecto, es decir que cada error y defecto es una oportunidad más para corregir y seguir trabajando en el desarrollo de un sistema que sea totalmente probado con estándares de calidad que permitan obtener la satisfacción del cliente o usuario final. Cuando el software es nuevo, es muy moldeable, puede ser formado completamente al gusto de sus implementadotes. Pero tan pronto como un proyecto dado crece más y más, y desarrolla una gran base de usuarios con mayor experiencia con el software, se vuelve menos y menos maleable. Como un metal que ha sido forjado, el software se vuelve un sistema heredado (legacy system), frágil e incapaz de ser fácilmente cambiado sin fracturar el sistema completo. Hay muchas razones detrás de esta fragilidad: Los usuarios esperan interfaz de usuario constante; una vez que una característica ha sido implementada y expuesta a los usuarios, es muy difícil de convencerlos de aceptar cambios mayores a esa característica, incluso si esa característica no estaba bien diseñada en principio o la existencia de la misma bloquea un mayor progreso. 124

125 Demasiada documentación puede describir el comportamiento actual (del software) y sería costoso de cambiar. Además, es esencialmente imposible recordar todas las copias de la documentación existente así que es más probable que los usuarios tengan que consultar en los manuales, esto no esta mal pero puede causar un problema cuando el sistema haya avanzado en versiones y los manuales no, es decir se crea un desfase de versiones, lo que yo tengo impreso y lo uso como guía no llega a adaptarse completamente a una nueva versión con cambios significativos. Otro punto que debemos tener presente y que es de gran importancia analizarlo es la transición que se hace de programador a programados, Los desarrolladores originales que han comenzado con la tarea de construir un sistema a veces no son los mismo que terminan la gran tarea, esto puede ser critico si estos desarrolladores originales dejan una documentación insuficiente del funcionamiento interno del software. Muchos detalles de implementaciones de tamaño pequeño solamente fueron entendidos a través de las transmisión oral directa del equipo de diseño y muchos de estos detalles se han perdido, o se han podido perder, aunque algunos pueden ser redescubiertos a través del análisis de código que por cierto es demasiado complejo cuando el código implementado no pertenece a la persona que hace el análisis. Al hablar de defectos no debemos olvidar los famosos parches o soluciones que a veces no son mas que soluciones temporales que hacen que el error se oculte por un cierto tiempo para luego acumular más falencias terminando con la estabilidad de un sistema convirtiéndolo en algo tedioso y molesto de manejar para el usuario. Los parches software se han efectuado probablemente a través de los años, cambiando sutilmente el comportamiento del software. En muchos casos, estos parches corrigen el fallo por el cual fueron efectuados pero introducen otros fallos más sutiles en el sistema. Estos fallos sutiles hacen cambios subsecuentes al sistema lo que lo vuelve finalmente más complicado. 125

126 Es común para los sistemas de software volverse ligeramente frágiles dentro de, digamos, cinco años y casi inmantenibles dentro de quince años. Es muy raro que encontremos un proyecto de software tan bien diseñado que pueda sostenerse un periodo de tiempo mayor siendo fácilmente mantenible. Más a menudo, la antigua base de código será simplemente abandonada y un sistema completamente nuevo será iniciado desde cero; el nuevo sistema puede estar libre de muchas de las cargas del sistema heredado. El grafico presentado a continuación es una muestra tomado del libro Software testing in the Real World en el cual nos muestra que la mayor concentración de defectos normalmente están en los requisitos, si no se tiene claro que es lo que se tiene y que es lo que se va a aplicar, podremos decir que nuestro proyecto presentará en su futuro desarrollo innumerables problemas y defectos que repercutirán en la confiabilidad del producto de software. Gráfico 22 Defectos en los productos 126

127 5.1.1 TIPOS DE DEFECTOS En un ambiente formal de desarrollo de software, la organización o equipo de desarrollo tendrán algún mecanismo para documentar y rastrear defectos y deficiencias. El Software tan igual como la mayoría de otros productos, es típicamente lanzado con un conjunto conocido de defectos y deficiencias. El software es lanzado con esos defectos conocidos porque la organización de desarrollo decide que la utilidad y el valor del software en un determinado nivel de calidad compensen el impacto de los defectos y deficiencias conocidas. Las deficiencias conocidas son normalmente documentadas en una carta de consideraciones operacionales o notas de lanzamiento (release notes) es así que los usuarios del software serán capaces trabajar evitando las deficiencias conocidas y conocerán cuando el uso del software sería inadecuado para tareas específicas. Con el lanzamiento del software (software release), otros, defectos y deficiencias no documentados serán descubiertas por los usuarios del software. Tan pronto como estos defectos sean reportados a la organización de desarrollo, serán ingresados en el sistema de rastreo de defectos. Un defecto de software (computer bug en inglés), es el resultado de un fallo o deficiencia durante el proceso de creación de programas de ordenador o computadora (software). Dicho fallo puede presentarse en cualquiera de las etapas del ciclo de vida del software aunque los más evidentes se dan en la etapa de desarrollo y programación. Los errores pueden suceder en cualquier etapa de la creación de software Diseños con colores inapropiados para las personas que padecen daltonismo Diseños que usan textos con tipografías de difícil lectura por su tamaño o diseño. 127

128 Diseños que fuerzan el uso del ratón o mouse sin dejar alternativas de teclado para personas con disfunciones motrices. Diseños con implicaciones culturales, por ejemplo usando partes del cuerpo que en una determinada cultura sean objeto de vergüenza o burla o símbolos con características de identidad cultural o religiosa. Estimar que el equipo donde se instalará tiene determinadas características como la resolución de la pantalla, la velocidad del procesador, la cantidad de memoria o conectividad a Internet Objetos intrusivos y obstrusivos como cuadros de diálogo modales al sistema o asistentes como "Clippy" (Clipo, en español) que impedía el uso uniforme de Office de Microsoft. Estos errores presentados son comunes en la fase de diseño y están ligados más a aspectos visuales y de acoplamiento al usuario como tal. De igual forma existen defectos que se van produciendo internamente en el código del programa, los más comunes lo presentamos a continuación. División por cero Ciclo infinito Problemas aritméticos desbordamiento (overflow) o subdesbordamiento (underflow) Exceder el tamaño del array Utilizar una variable no inicializada Acceder a memoria no permitida (access violation) Pérdida de memoria (memory leak) Desbordamiento o subdesbordamiento de la pila (estructura de datos) Buffer overflow Deadlock Índice inadecuado de tablas en bases de datos. 128

129 Para terminar con esta clasificación de los errores o defectos que se presentan en todo el proceso de desarrollo de una aplicación, vamos a citar los defectos que se producen en la instalación de la aplicación. Eliminación o sustitución de bibliotecas comunes a más de un programa o del sistema. Reiniciar arbitrariamente la sesión de un usuario para que la instalación tenga efecto. Presuponer que el usuario tiene una conexión permanente a Internet. La mayor parte de los lenguajes de programación presentan al menos dos tipos de errores que permiten a los programadores manejar las fallas de los programas de una manera eficiente y que no resulte agresiva con el usuario final. Dichos errores son de compilación y errores en tiempo de ejecución. Los errores de compilación normalmente inhiben que el código fuente derive en un programa ejecutable, mientras que los errores en tiempo de ejecución son situaciones específicas en las que un evento externo al programa impide su ejecución. Regularmente un programador eficiente debe intentar imaginar como debe responder ante esos eventos de manera que sea el programa y no el usuario o el sistema operativo los que resuelvan el problema. 129

130 5.1.2 PASOS PARA ENCONTRAR DEFECTOS Para comenzar con el gran trabajo que implica analizar la aplicación en busca de defectos que permanecen ocultos y que en cierto momentos saltan a la vista ya sea del programador o en el peor de los casos a la vista de usuario común, se tienen muchas alternativas y a lo largo de los años se han depurado ciertas técnicas inclusive las propias casas desarrolladoras de lenguajes de programación se han preocupado por construir depuradores cada vez más eficientes que ayuden a controlar defectos, mediante pruebas de código, validaciones, etc. Las Pruebas de software son procesos centrados en el objetivo de encontrar defectos a un software; puede ser por razones de depuración al software o de aceptación del mismo. Tratar de encontrar defectos es una parte esencial en todo proceso de pruebas. A pesar que todo mundo está de acuerdo que es mejor prevenir defectos que encontrarlos y corregirlos, la realidad es que actualmente somos incapaces de producir sistemas libres de defectos. Las pruebas es un elemento esencial en el desarrollo de sistemas, el cual ayuda a mejorar la calidad de los sistemas. El objetivo final de las pruebas, es mantener bien informada a la organización respecto a los defectos observados relacionados con los requerimientos del sistema, ya sean estos explícitamente definidos o implícitamente asumidos. Las pruebas no mejoran directamente la calidad del sistema, pero sí lo hace indirectamente previendo un panorama claro de las debilidades del sistema observadas y de los riegos asociados a la organización. Esto permite a la administración para tomar decisiones respecto a la asignación de recursos para mejorar la calidad del sistema. Para lograr estos objetivos de prueba, todo proceso de prueba contiene actividades para planear que es lo que se necesita, especificando que debe ser probado, y ejecutando esos casos de prueba. Hay una regla universal, la cual indica que es imposible encontrar todos 130

131 los defectos y que nunca hay suficiente tiempo, personal o dinero para probar todo. Se deben tomar decisiones sabias de como distribuir los recursos disponibles. Las técnicas para evitar defectos pretenden impedir la ocurrencia de errores y fallas encontrando defectos en el sistema antes de lanzarlo. Incluye el desarrollo de metodologías (uso de modelos), la administración de la configuración (control ante el cambio), las técnicas de verificación (casos específicos) y las revisiones (ensayos e inspecciones). Las técnicas de detección de defectos permiten encontrar los defectos en el sistema pero sin recuperar las causas que los originan, es decir, las fallas. Incluye actividades de depuración (para corrección y de desempeño) llevando el sistema a través de una sucesión de estados revisando uno a uno y finalizando hasta encontrar e identificar el error. Las técnicas de tolerancia de defectos permiten recuperar una falla mientras el sistema está puesto en ejecución, lo cual se logra pasando la información del estado erróneo a los componentes que lo llamaron, asumiendo que alguno de ellos sabrá qué hacer en tales casos. El hecho es que, si no se puede impedir errores, el sistema lanzado contendrá defectos que darán lugar a fallas. El sistema podrá continuar aunque falle un componente debido a que los demás componentes todavía están realizando funcionalidad requerida ESTIMACIÓN DE DEFECTOS El número de defectos está relacionado con el número de posibles resultados. El número de posibles resultados está relacionado con el número de casos de prueba. Hay un gran beneficio en la estimación del número de casos de prueba. Entendiendo que el número de casos de prueba nos lleva al análisis lógico de comparar los casos de prueba actuales con los casos de prueba esperados. Si los casos de prueba actuales son menores que los casos de prueba esperados, entonces hay una cobertura de pruebas inadecuada. La cobertura de prueba representa una indicación de defectos potenciales y de futuros costos de mantenimiento. Cuanto mayor sea la brecha entre los casos de prueba esperados y los 131

132 casos de prueba actuales, más grande es el potencial de defectos que no se detectan durante las pruebas. El siguiente es un principio básico de calidad de software. La única manera de que la producción de software mejore es si y sólo si todo el software nuevo integrado en producción es de una calidad más alta que el software que existe actualmente. Es importante entender tanto el potencial de defectos del software actual y el potencial de defectos del nuevo software. Puede ser imposible estimar el número de defectos inherentes en la producción del software actual, pero el potencial de defectos para cada versión de software se puede estimar. La brecha entre los casos de prueba esperados y los casos de prueba actuales es un buen indicador de defectos potenciales. Podemos ver a las inspecciones de software como un repaso detallado y formal del trabajo en proceso. Los productos de trabajo son considerados en progreso hasta que la inspección y las correcciones necesarias estén completas. El tiempo de la inspección varía según cuan familiarizado esté el inspector con el material. Para la estimación o inspección de defectos se pueden considerar estos 6 pasos. 1. Planificación: Cuando el desarrollador completa su "producto de trabajo", se forma un grupo de inspección y se designa un moderador. El moderador asegura que el ""producto de trabajo"" satisfaga el criterio de inspección. Se le asignan diferentes roles a las personas que integran el grupo de inspección, así como la planificación de tiempos y recursos necesarios. 2. Overview: Si los inspectores no están familiarizados con el desarrollo de l proyecto, un vista general es necesaria en éste momento. Este es un paso opcional, pero no menos importante ya que en esta etapa se dará al grupo de inspección un "background" y el contexto a cubrir por las inspecciones. 132

133 3. Preparación: Los inspectores se preparan individualmente para la evaluación en la reunión, estudiando los productos de trabajo y el material relacionado. Aquí es aconsejable la utilización de listas de chequeos para ayudar a encontrar defectos comunes. El tiempo que pueda llevar esta etapa va a depender de cuan familiarizado esté el inspector con el trabajo que debe analizar. 4. Examen: En esta etapa, los inspectores se reúnen para analizar su trabajo individual en forma conjunta. El moderador deberá asegurarse que todos los inspectores están suficientemente preparados. La persona designada como lector presenta el "producto de trabajo", interpretando o parafraseando el texto, mientras que cada participante observa en busca de defectos. Es recomendable que este examen no dure más de 2 horas ya que la atención en busca de defectos va disminuyendo con el tiempo. Al terminar con la reunión, el grupo determina si el producto es aceptado o debe ser retrabajado para una posterior inspección. 5. Retrabajo: El autor corrige todos los defectos encontrados por los inspectores. 6. Seguimiento: El moderador chequea las correcciones del autor. Si el moderador está satisfecho, la inspección está formalmente completa, y el "producto de trabajo" es puesto bajo el control de configuración. A partir de estos seis pasos surge la necesidad de la conformación de: objetivos, participantes de la inspección y con que roles, productos de trabajo a inspeccionar y cual deberá ser el resultado de las reuniones de inspección. 133

134 5.1.4 CÓMO ELIMINAR LOS DEFECTOS En nuestro medio, usualmente se aplican pruebas al final del "ciclo de vida del desarrollo". Tales pruebas se hacen, típicamente, de manera asistemática: no han sido planeadas, especificadas ni diseñadas de previo; además, cuando se ejecutan, las realiza privadamente el propio desarrollador del elemento bajo. Una vez realizadas algunas pruebas, se pasa de inmediato a "depurar los defectos, se hacen más pruebas, y se vuelve a "depurar" y así sucesivamente, hasta llegar a tener un producto de calidad comprobada. Esto implica hacer un trabajo en la determinación de los requerimientos que deberá satisfacer la aplicación. Se debe ir más allá de lo típico, es decir profundizar en el trabajo de inspección, para que la aplicación se encuentre totalmente limpia es decir lista para su entrega al usuario final. Parte de la evaluación puede hacerse sin ejecutar programas ('código'), si aplicamos un proceso que introduzca modelos intermedios del software, que podrían ser revisados estáticamente mediante un proceso grupal metódico. De estos modelos también pueden derivarse, de manera temprana y oportuna, los planes, especificaciones y diseños de las pruebas que podrían luego aplicarse sistemáticamente,. Hay procesos y métodos que incorporan modelos y técnicas, que permiten filtrar cerca de la totalidad de los defectos presentes en los productos de software antes de que estos sean "liberados" para su uso. Para poder aprovechar todas las posibilidades de depuración es necesario que, al compilar el programa a depurar, se indique al compilador que debe incluir instrucciones e información extra para la depuración del código. Dicha información extra consiste básicamente en la 134

135 correspondencia entre las instrucciones del código ejecutable y las instrucciones del código fuente que las originan, así como información sobre nombres de variables y funciones. Aún si no se incluye esta información de depuración, sigue siendo posible monitorizar la ejecución del programa. Sin embargo, resultará más difícil y compleja debido a esa falta de información del contexto en el que se ejecuta el programa. Las pruebas de software, testing, beta testing es un proceso usado para identificar posibles fallos de implementación, calidad, o usabilidad de una aplicación, esta es la alternativa o primer paso para la eliminación de los defectos. Básicamente es una fase en el desarrollo de software consistente en probar las aplicaciones construidas. Únicamente un proceso de verificación formal puede probar que no existen defectos. Hay muchos planteamientos a la hora de abordar el testeo de software, pero para verificar productos complejos de forma efectiva requiere de un proceso de investigación más que seguir un procedimiento al pie de la letra. Una definición de "testing" es: proceso de evaluación de un producto desde un punto de vista crítico, donde el "tester" (persona que realiza el testeo) somete el producto a una serie de acciones inquisitivas, y el producto responde con su comportamiento como reacción. Por supuesto, nunca se debe testear el software en un entorno de producción. Es necesario testear los nuevos programas en un entorno de pruebas separado físicamente del de producción. 5.2 DEFECTOS DE DISEÑO En el transcurso del desarrollo del Sistema Médico se nos presentó varios defectos de diseño los cuales fueron resueltos como se detalla a continuación: DataGrid en ASP.NET a) Normalmente los controles de rejilla en ASP.NET (u otros similares enlazados a datos) se generan usando el diálogo especial que a tal efecto dispone Visual Studio. En éste se definen las columnas que llevará así como las características de éstas. Si por ejemplo se 135

136 define una columna de plantilla que, inicialmente, no está enlazada con ningún campo de un origen de datos, Visual Studio utiliza comillas dobles para asignar los valores de sus propiedades en el código de la página. Lo que ocurre es que si luego retocamos la plantilla manualmente e incluimos código C# o VB.NET en la columna de plantilla (muy habitual para enlaces personalizados a datos) lo más probable es que obtengamos un error al intentar compilar. Ello es debido a que, al tener comillas en el exterior como delimitadores, en cuanto incluyamos también comillas dentro de la expresión (para una cadena, por ejemplo) el intérprete de tiempo de ejecución identifica mal los límites del atributo, produciendo un error. La solución que encontramos para este defecto es que hay que cambiar los delimitadores externos del atributo a comillas simples ('). Es menos frecuente incluir este carácter dentro del código y por lo tanto es menos probable que se produzca un error como el mencionado. Es algo muy sencillo pero de gran utilidad para principiantes. b) Muchas veces se incluye texto sacado de una base de datos dentro de la columna de un DataGrid como resultado de un enlace a datos. Si dicho texto es algo largo y hay muchas columnas en la rejilla, normalmente se comprime para dejar sitio a las demás, quedando feo y destacando poco. Podemos impedir que ocurra esto en una columna de plantilla usando el atributo ItemStyle-Wrap, haciendo que el texto ocupe todo el espacio que necesite, por ejemplo: <asp:templatecolumn HeaderText="Mi encabezado" ItemStyle-Wrap=False> c) Para que una columna enlazada no aparezca tal y como está en la base de datos sino que se le aplique de manera automática un formato, es preciso utilizar la propiedad 136

137 DataFormatString de las columnas. Ésta se puede aplicar directamente en el código HTML o, si usamos la interfaz gráfica del diseñador de rejillas de Visual Studio, usando el campo Formato. El valor de esta propiedad sigue las mismas reglas que se usan en la plataforma.net para el formato de cadenas, y dependerá del tipo de dato almacenado en el campo de la base de datos. Por ejemplo, si hemos enlazado un campo que contiene fechas y queremos que aparezca con formato largo, esto es, por ejemplo, "25 de julio de 2007", sólo tendríamos que asignar a la propiedad el valor "{0:D}". Si en lugar de una 'd' mayúscula la ponemos minúscula el formato de la fecha sería el corto. d) En ocasiones hay que realizar transformaciones más o menos complejas con la información contenida en un origen de datos antes de enlazarlos a un control, como por ejemplo una rejilla. Para no crear páginas farragosas que recuerden los aciagos tiempos del "código spaguetti" de ASP, lo mejor en estos casos es crear un método que devuelva una cadena con el resultado que queremos obtener, alejando así la complejidad de la transformación del código HTML de la página. El nuevo método lo crearemos dentro de alguna clase accesible desde la página que lo quiera utilizar. De este modo se lo puede llamar desde el código de enlazado (<%# %>) para no hacerlo innecesariamente largo o complejo. Sin embargo, y en contra de lo que pudiera parecer a primera vista, no llega con que la clase con las utilidades se encuentre dentro del mismo espacio de nombres que el resto de la aplicación, puesto que el código de enlazado a datos se ejecuta dentro de su propio Espacio de nombres, específico para la página actual. Para asegurarnos de que al enlazar los datos se encuentran esas funciones auxiliares podemos hacer tres cosas: 137

138 Si estamos seguros de que la función de transformación sólo se va a utilizar desde la página actual bastará con incluirla dentro del archivo de código "CodeBehind" de dicha página (el que tiene su mismo nombre y extensión.cs o.vb) para poder usarla directamente por su nombre, sin necesidad de calificadores previos. Podemos escribir la ruta completa dentro del espacio de nombres al método a utilizar. Por ejemplo: MiEspacioDeNombres.ClaseAuxiliar.MetodoEspectacular(); Se puede emplear la directiva <%@ Import %> de la página para referenciar el espacio de nombres en el que se encuentra el método: <%@ Import Namespace="MiEspacioDeNombres" %> En cualquier caso lo que obtendremos es un código más limpio y más fácil de mantener Cómo configurar un proxy para acceder a servicios Web En programación COM tradicional lo que se solía utilizar a la hora de conectar con un recurso Web mediante HTTP (fuera éste una página o un servicio Web) era la biblioteca WinHTTP o bien la clase que a tal efecto proporcionaban las bibliotecas MSXML. En ambos casos si la conectividad se obtenía a través de un Proxy era necesario configurarlo usando una utilidad externa de línea de comandos, lo cual era un verdadero problema en distribuciones grandes o que debíamos hacer manualmente. No digamos si la aplicación era en un servidor Web al que sólo teníamos acceso mediante FTP (en un hosting por ejemplo). Con.NET la vida es mucho más fácil, como no. Así, por ejemplo, cuando vamos a consumir un servicio Web desde una aplicación.net, al añadir una referencia Web se crea una clase que nos abstrae de la complejidad de llamar a los métodos remotos y gestionar las comunicaciones HTTP. Esta clase hereda de SoapHttpClientProtocol, que a su vez 138

139 hereda de HttpWebClientProtocol. Esta última dispone de una propiedad llamada Proxy del tipo System.Net.IWebProxy, que nos permite especificar la información del proxy a utilizar. De este modo, si necesitamos especificar información sobre un Proxy para acceder a la Web basta con escribir código análogo al siguiente: string DireccionDelProxy = " "; //La URL o dirección IP del servidor proxy int PuertoDelProxy = 8080; //Puerto por el que escucha el proxy //Se crea una instancia del objeto proxy System.Net.WebProxy miproxy = new System.Net.WebProxy(DireccionDelProxy, PuertoDelProxy); //y se asigna al envoltorio del servicio Web (o similar) miservicio.proxy = miproxy; Como vemos muy directo y sin depender de herramientas externas. Si además fuese necesario utilizar unas credenciales (nombre + clave) para poder hacer uso del Proxy sólo tenemos que crear una nueva instancia de la clase System.Net.NetworkCredentials y asignarla a la propiedad Credentials del proxy, así: miproxy.credentials = new System.Net.Credentials("Usuario", "contraseña", "dominio"); Si lo que necesitamos es pasarle directamente las credenciales del usuario que esté actualmente autenticado en el sistema es más sencillo todavía: servicioweb.credentials= System.Net.CredentialCache.DefaultCredentials; Usar el control calendario en ASP.NET El control calendario proporciona una forma rápida y sencilla de crear calendarios en las páginas web. A través de este control y con unas pocas líneas de código podemos realizar 139

140 un calendario completo para representar, por ejemplo, una serie de eventos relacionados con un mes. El control calendario muestra un calendario de un mes y permite seleccionar el mes siguiente o el anterior. Por defecto muestra el mes actual pero podemos modificar esta funcionalidad (imagen 1). Con este método Calendar1.SelectedDate podemos elegir el mes que queremos mostrar. Gráfico 23 Control Calendario Calendar1.SelectedDate = Convert.ToDateTime("12/08/2005"); Una vez tenemos el control insertado en la página web vamos a ver cómo podemos modificarlo y personalizarlo. Lo primero que haremos es darle un poco más de color y cambiar su aspecto a de la imagen 2, para ésto es necesario modificar las propiedades a través de la ventana de propiedades (imagen 2) o a través de código HTML: 140

141 Gráfico 24 Control Calendario <TodayDayStyle ForeColor="Black" BackColor="#FF9900"></TodayDayStyle> <SelectorStyle BackColor="#CCCCCC"></SelectorStyle> <NextPrevStyle VerticalAlign="Bottom"></NextPrevStyle> <DayHeaderStyle Font-Size="9pt" Font-Bold="True" BackColor="#CCCCCC"></DayHeaderStyle> <SelectedDayStyle Font-Bold="True" ForeColor="White" BackColor="#FF9900"></SelectedDayStyle> <TitleStyle Font-Bold="True" BorderColor="Black" BackColor="#999999"></TitleStyle> <WeekendDayStyle BackColor="#DBE5EC"></WeekendDayStyle> <OtherMonthDayStyle ForeColor="Gray"></OtherMonthDayStyle> 141

142 Tabla 17: Descripción de estilos También sustituimos las flechas de cambio de mes por el nombre abreviado del mes, cambiando la propiedad NexPrevFormat de CustomText, que es la que tiene por defecto, a ShortMonth. Ahora tenemos el control calendario con un poco más de diseño y vamos a modificar los elementos del calendario para que cuando pasemos por un día se marque en otro color. Además enlazaremos unos determinados días con un link para que vaya a otra página simulando los días de un evento. Nota: En el ejemplo, los días marcados como evento se extraen de un array pero fácilmente puede modificarse el código para que esos días puedan estar en una base de datos Modificar calendario en tiempo de ejecución Cuando el control calendario se renderiza y se va construyendo podemos modificar todos sus elemento creando un método. En modo de diseño añadiremos el método ParseCalendar al evento OnDayRender. El método ParseCalendar, es un método que nosotros creamos en el código: Creamos el método para modificar los elementos del calendario, los días. En el parámetro e vienen definidos los días del calendario y cada vez que se muestra un día por pantalla pasa por esta función. public void ParseCalendar(object sender, DayRenderEventArgs e) { Definimos una variable que representara el día actual. 142

143 string sdia = System.DateTime.Now.Day.ToString(); Definimos el color que tendrán los días cuando pase el ratón por encima de ellos. e.cell.attributes["onmouseover"] = "this.style.backgroundcolor='pink';"; Si el día es fin de semana lo pintamos de azul claro. if (e.day.isweekend) { e.cell.attributes["onmouseout"] = "this.style.backgroundcolor='#dbe5ec';"; } Si pasamos con el ratón por encima del día actual se pone de color rosa y luego hacemos que vuelva a tener el color del día actual. if (e.day.daynumbertext == sdia && e.day.istoday == true) e.cell.attributes["onmouseout"] = "this.style.backgroundcolor='#ff9900';"; Creamos un enlace en los días marcados como eventos que tenemos guardados en un array (DiasMarcados) for (int i = 0; i < DiasMarcados.Length; i++) { string[] arrayfecha = e.day.date.tostring().split(new char[] {' '}); if (arrayfecha[0] == DiasMarcados[i]) { e.cell.tooltip = DiasMarcados[i]; e.cell.text = "<a href='ventana.aspx?even=" + DiasMarcados[0] + "'>" + e.day.daynumbertext + "</a>"; 143

144 } } Envío de correo electrónico con ASP.NET El envío de correo electrónico se ha convertido en uno de los mayores mecanismos de comunicación adoptado por distintas personas y empresas. Su costo y velocidad de entrega de la información es uno de los factores que atrae el interés de cada vez más personas. Por estas funciones, Visual Basic.NET y C# utilizan la clase System.Web.Mail que envía el correo electrónico a través de SMTP (Simple Mail Transfer Protocol). Después de la creación de la instancia del objeto, basta con utilizar los métodos y propiedades para crear y enviar el mensaje de correo electrónico. Cree un proyecto de aplicación de Web de ASP.NET con los botones que se usarán para enviar el mensaje. 144

145 Gráfico 25 Envío de Haciendo doble clic en los botones y escriba el código necesario para enviar un mensaje de correo electrónico sencillo, con un archivo adjunto con formato HTML. Es importante recordar que tendrá que cambiar las direcciones que desee usar realmente. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim As New MailMessage() With .from = "origen@origen.com".to = "destino@destino.com".subject = "Artículo de MSDN".Body = "Lea todos los artículos de MSDN, para aprovechar la tecnología al máximo." End With SmtpMail.Send( ) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim As New MailMessage() With 145

146 .From = "origen@origen.com".to = "destino@destino.com".subject = "Artículo de MSDN".Body = "<HTML><Body>Nuevos artículos en <b>msdn</b>.<br>busque los <font color=red>libros de.net</font></body></html>".bodyformat = MailFormat.Html.Priority = MailPriority.High.Attachments.Add(New MailAttachment("c:/help.txt")) End With SmtpMail.Send( ) End Sub A través de reglas, es necesario configurar las propiedades From, To, Subject y Body y usar el método SmtpMail.Send para enviar el mensaje de correo electrónico. Observe que si necesita enviar un mensaje de correo electrónico con etiquetas de HTML, debe usar la propiedad BodyFormat para indicar que será de tipo HTML. Otra posibilidad es adjuntar archivos al correo electrónico a través de Attachments.Add. El detalle más importante a la hora de escribir este código es insertar en la primera línea de la pantalla la línea que hace referencia a la clase de correo electrónico. Para evitar dudas, esta línea debe aparecer antes de la línea Public Class Envia . Imports System.Web.Mail Para definir el objeto de correo electrónico, escriba la línea siguiente: MailMessage = new MailMessage(); Los métodos y las propiedades son iguales a los mencionados anteriormente para Visual Basic.NET. 146

147 Nota: Se debe poner atención porque C# distingue entre mayúsculas y minúsculas. 5.3 CALIDAD DEL PRODUCTO PRUEBAS DEL PRODUCTO (SIMULADAS) Una vez concluida la construcción de interfaces del Sistema Médico MedNet procederemos a realizar las respectivas pruebas simuladas del Sistema para garantizar que su funcionamiento es el correcto y que no presentará ningún problema al momento de ser implementado en los Servidores de COSENA. Para realizar las pruebas simuladas empezaremos con el ingreso de datos desde las interfaces del sistema y comprobaremos el almacenamiento de la información en la base de datos local que creamos para el funcionamiento del sistema. 1.- Creamos una base de datos en el para realizar las diferentes pruebas la misma que se llama CLÍNICA. 147

148 Imagen 22 "Pantalla del motor SQL Server 2005" 148

149 2.- Una vez que hemos creado la BDD con el nombre CLÍNICA procedemos a correr el script generado por el diseño físico implementado en la herramienta Power Designer. Nota: El detalle del código fuente para la creación de la Base de Datos se encuentra en el manual técnico. Tabla 18: Código generado por el modelo físico. Imagen 23 "Pantalla Ejecución de sentencias" 3.- Una vez generado el script con el código de creación de tablas y relaciones procedemos a modificar la especificación de identidad para cada una de las tablas del sistema a excepción de la tabla Usuario 149

150 Imagen 24 "Pantalla Ejecución de sentencias" Imagen 25 "Pantalla Identidad tabla Cita" 150

151 Imagen 26 "Pantalla Identidad tabla Cargo" Imagen 27 "Pantalla Identidad tabla Departamento" 151

152 Imagen 28 "Pantalla Identidad tabla Hora" Imagen 29 "Pantalla Identidad tabla Historia Clínica" 152

153 Imagen 30 "Pantalla Identidad tabla Informe" Imagen 31 "Pantalla Identidad tabla Paciente" 153

154 4.- Procedemos a ingresar información que debe estar grabada directamente en la base de datos ya que dicha información va por defecto como son: Cargos, Departamento, Horas, y además un usuario tipo Administrador con el que el sistema arrancará para su correcto funcionamiento en las tablas Usuario y Paciente. Imagen 32 "Pantalla Datos básicos tabla Cargo" 154

155 Imagen 33 "Pantalla Datos básicos tabla Departamento" Imagen 34 "Pantalla Datos básicos tabla Horario" 155

156 Imagen 35 "Pantalla Datos inicial Administrador tabla Usuario" Imagen 36 "Pantalla Datos inicial Administrador tabla Paciente" 156

157 Una vez que hemos concluido con el almacenamiento directo de información básica en la BDD podemos empezar a utilizar el sistema médico MedNet. Ingreso al sistema y validación del almacenamiento de la información a través de sistema. MENÚ ADMINISTRADOR 1.- Ingresamos al sistema con el usuario creado inicialmente en la BDD el mismo que tiene el perfil de Administrador. 157

158 2.- A partir del ingreso con este usuario al menú Administración el sistema MedNet empieza a funcionar, en el cual y como primer punto crearemos un usuario que tendrá el perfil de usuario Básico y la creación de un usuario Avanzado con los cuales trabajaremos para comprobar el funcionamiento del sistema. Empezaremos con la creación del usuario Básico y confirmaremos el almacenamiento de datos en la BDD. Una vez pulsado el botón guardar en el formulario, verificamos que la misma información se grabó en la BDD. 158

159 De esta manera comprobamos que el formulario Administrador de Usuarios funciona correctamente. Realizamos el mismo procedimiento para la creación de un usuario con el perfil Avanzado. De igual manera verificamos en la BDD que la información relacionada con usuario avanzado se encuentre almacenada. 159

160 3.- En el módulo de Consulta de Usuarios Administrador podemos observar que el sistema muestra la información que se encuentra almacenada en la BDD. Dentro de este módulo al presionar el botón seleccionar podemos observar que el sistema direcciona correctamente a la información del usuario que en este caso queremos ver. Por lo que comprobamos que el formulario Datos Personales Administrador funciona correctamente. 160

161 De esta manera concluimos que en el sistema médico MedNet el perfil de Administrador funciona sin ningún problema y otorgando los resultados esperados. MENU BASICO 1.- Realizamos el ingreso a este módulo por medio del usuario que creamos bajo este perfil en el módulo de Administrador y procederemos realizar las validaciones necesarias. 161

162 162

163 2.- Ingresamos al formulario de Datos Personales Básico donde observamos que el sistema está tomando la información correctamente almacenada en la BDD. 3.- En el formulario de Historia Clínica al momento no tenemos datos debido a que esta información lo realiza el médico baja el perfil de Avanzado el mismo que validaremos cuando pasemos al siguiente módulo. 163

164 4.- En el formulario de citas procedemos a realizar una cita y verificar que la misma se almacene en la BDD. De esta manera observamos que la cita se encuentra almacenada en la BDD y confirmamos que el formulario de Citas Básico funciona correctamente. 5.- De igual manera podemos comprobar en el formulario de Historial de Citas que el sistema carga la información correcta demostrando que el sistema funciona correctamente. 164

165 6.- En el formulario de Informe al momento no tenemos datos debido a que esta información lo realiza el médico baja el perfil de Avanzado el mismo que validaremos cuando pasemos al siguiente módulo. MENÚ AVANZADO 1.- Realizamos el ingreso a este módulo por medio del usuario que creamos bajo este perfil en el módulo de Administrador y procederemos realizar las validaciones necesarias. 165

166 2.- En el módulo de Consulta de Usuarios Avanzado podemos observar que el sistema muestra la información que se encuentra almacenada en la BDD. 166

167 Dentro de este módulo al presionar el botón seleccionar podemos observar que el sistema direcciona correctamente a la información del usuario que en este caso queremos ver. Por lo que comprobamos que el formulario Datos Personales Avanzado funciona correctamente. 167

168 3.- En el formulario de Consultar Citas Avanzado podemos observar que el sistema carga la información correspondiente a todas las citas que el médico va a tener diariamente. Por lo que comprobamos que el formulario Consulta de Citas Avanzado funciona correctamente. 4.- En el formulario Receta Avanzado lo que nos permite es imprimir directamente la información tipiada por el Medico, el sistema direcciona automáticamente a la impresora que se encuentra predeterminada en el equipo o servidor. 168

169 5.- En el formulario Examen Avanzado lo que nos permite es imprimir directamente la información tipiada por el Medico, el sistema direcciona automáticamente a la impresora que se encuentra predeterminada en el equipo o servidor. 169

170 6.- En el formulario de Historia Clínica Avanzado permite el ingreso de información la misma que se almacena en la BDD. 170

171 De esta manera se confirma que el sistema funciona correctamente. En el formulario menú Historia Clínica Básico se refleja la información no editable de la historia clínica del paciente, confirmando que el sistema funciona correctamente. 171

172 7.- En el formulario de Redactar Informe Avanzado vemos que al ingresar la información del paciente seleccionado se almacena en la BDD, reflejándose también en el módulo básico en el formulario Informes Básico 172

173 173

174 En el formulario del menú Básico se muestra así: 174

175 5.3.2 Estimación de Rendimiento (Simulado) Una vez realizadas las pruebas del producto simuladas podemos realizar una estimación de rendimiento simulado en donde tenemos los siguientes resultados: PROCESO Ingreso por primera vez al sistema Ingresos posteriores al sistema Almacenamiento de información a la BDD Consulta de información a la BDD Confirmación de las citas al correo electrónico DURACION 5-8 segundos 2 3 segundos 2-3 segundos 1-2 segundos 10 segundos Tabla 19: Rendimiento Simulado Además se tiene un detalle de la capacidad del motor de BDD SQL Server 2005 En las siguientes tablas se especifican los tamaños y números máximos de diversos objetos definidos en los componentes de Microsoft SQL Server Objetos del motor de base de datos En la siguiente tabla se especifican los tamaños y números máximos de diversos objetos definidos en las bases de datos de SQL Server 2005 o a los que se hace referencia en las instrucciones Transact-SQL. La tabla no incluye SQL Server Windows CE Edition. Objeto de Motor de base de datos de SQL Server 2005 Tamaño de lote 1 Tamaños/números máximos SQL Server 2005 (32 bits) * Tamaño de paquete de red Tamaños/números máximos SQL Server 2005 (64 bits) * Tamaño de paquete de red Bytes por columna de cadenas cortas Bytes por GROUP BY y ORDER BY 8,000 8,000 8,060 8,060 Bytes por clave de índice Bytes por clave externa Bytes por clave principal Bytes por fila 8 8,060 8,

176 Bytes por columna varchar(max), varbinary(max), xml, text o image Caracteres por columna ntext o nvarchar(max) Índices agrupados por tabla 2^31-1 2^31-1 2^30-1 2^ Columnas en GROUP BY y ORDER BY Limitado sólo por el número de bytes Limitado sólo por el número de bytes Columnas o expresiones en una instrucción GROUP BY WITH CUBE o WITH ROLLUP Columnas por clave de índice 7 Columnas por clave externa Columnas por clave principal Columnas por tabla base 1,024 1,024 Columnas por instrucción SELECT Columnas por instrucción INSERT 4,096 4,096 1,024 1,024 Conexiones por cliente Valor máximo de conexiones configuradas Valor máximo de conexiones configuradas Tamaño de la base de datos Bases de datos por instancia de SQL Server Grupos de archivos por base de datos Archivos por base de datos Tamaño de archivo (datos) Tamaño de archivo (registro) terabytes terabytes 32,767 32,767 32,767 32,767 32,767 32, terabytes 16 terabytes 2 terabytes 2 terabytes Referencias a tabla de claves externas por tabla 4 176

177 Longitud del identificador (en caracteres) Instancias por equipo Longitud de una cadena que contiene instrucciones SQL (tamaño de lote) 1 50 instancias en un servidor independiente para todas las ediciones de SQL Server 2005 a excepción de Workgroup Edition. Workgroup Edition admite un máximo de 16 instancias. SQL Server 2005 admite 25 instancias en un clúster de conmutación por error * Tamaño de paquete de red 50 instancias en un servidor independiente. 25 instancias en un clúster de conmutación por error * Tamaño de paquete de red Bloqueos por conexión Máximo de bloqueos por servidor Máximo de bloqueos por servidor Bloqueos por instancia de Hasta Limitado sólo por la SQL Server 5 memoria Niveles de procedimientos almacenados anidados Subconsultas anidadas Niveles de desencadenadores anidados Índices no agrupados por tabla Parámetros por procedimiento almacenado Parámetros por función definida por el usuario ,100 2,100 2,100 2,100 REFERENCES por tabla Filas por tabla Tablas por base de datos 3 Limitado por el espacio de almacenamiento disponible Limitado por el número de objetos de la base de datos Limitado por el espacio de almacenamiento disponible Limitado por el número de objetos de la base de datos Particiones por tabla o índice con particiones Estadísticas en columnas no indizadas 1,000 1,000 2,000 2,

178 Tablas por instrucción SELECT Desencadenadores por tabla 3 Limitado por el número de objetos de la base de datos Limitado por el número de objetos de la base de datos Índices o restricciones UNIQUE por tabla 249 no agrupados y 1 agrupado 249 no agrupados y 1 agrupado Conexiones de usuario 32,767 32,767 Índices XML Tabla 20: Objetos definidos en BDD SQL Server El tamaño del paquete de red es el tamaño de los paquetes de secuencia de datos tabular (TDS) utilizados para comunicarse entre las aplicaciones y el Database Engine (Motor de base de datos) relacional. El tamaño del paquete predeterminado es 4 kilobytes (KB) y se controla mediante la opción de configuración tamaño del paquete de red. 2 El número máximo de bytes de una clave de índice no puede superar los 900 en SQL Server Puede definir una clave utilizando columnas de longitud variable cuyos tamaños máximos sumen hasta más de 900, siempre que ninguna fila se haya insertado con más de 900 bytes de datos en dichas columnas. En SQL Server 2005, puede incluir columnas sin clave en un índice no agrupado para evitar el tamaño máximo de clave de índice de 900 bytes. 3 Los objetos de base de datos incluyen objetos como tablas, vistas, procedimientos almacenados, funciones definidas por el usuario, desencadenadores, reglas, valores predeterminados y restricciones. La suma de todos estos objetos en una base de datos no puede superar Aunque una tabla puede contener un número ilimitado de restricciones FOREIGN KEY, el máximo recomendado es 253. Dependiendo de la configuración del hardware que aloja a SQL Server, la especificación de restricciones de clave externa adicionales puede resultar un proceso dificultoso para el optimizador de consultas. 178

179 5 Este valor sirve para asignaciones de bloqueo estático. Los bloqueos dinámicos están limitados sólo por la memoria. 6 Si un procedimiento almacenado tiene acceso a más de 8 bases de datos o a más de 2 bases de datos en intercalación, recibirá un mensaje de error. 7 Si la tabla contiene uno o varios índices XML, la clave de agrupación de la tabla de usuario estará limitada a 15 columnas, ya que la columna XML se agrega a la clave de agrupación del índice XML principal. En SQL Server 2005, puede incluir columnas sin clave en un índice no agrupado para evitar la limitación de un máximo de 16 columnas de claves 8 SQL Server 2005 admite almacenamiento de desbordamiento de fila, lo que habilita la inserción de columnas de longitud variable de manera no consecutiva. Sólo se almacena una raíz de 24 bytes en el registro principal para columnas de longitud variable que se insertan de manera no consecutiva; por ello, el límite real por fila es más alto que en versiones anteriores de SQL Server. Para obtener más información, vea el tema sobre datos de desbordamiento de fila superiores a 8 KB en los Libros en pantalla de SQL Server Objetos de réplica En la siguiente tabla se especifican los tamaños y números máximos de diversos objetos definidos en la réplica de SQL Server La tabla no incluye SQL Server Windows CE Edition. Objeto de réplica de SQL Server 2005 Tamaños/números máximos SQL Server 2005 (32 bits) Tamaños/números máximos SQL Server 2005 (64 bits) Artículos (publicación de mezcla) Artículos (publicación de instantáneas o transaccional) Columnas de una tabla 1 (publicación de mezcla) ,767 32,

180 Columnas de una tabla 2 (publicación de instantáneas o transaccional de SQL Server) Columnas de una tabla 2 (publicación de instantáneas o transaccional de Oracle) Bytes para una columna utilizada en un filtro de fila (publicación de mezcla) Bytes para una columna utilizada en un filtro de fila (publicación de instantáneas o transaccional) Tabla 21: Objetos definidos en réplica BDD SQL Server Si se utiliza el seguimiento por filas para la detección de conflictos (la opción predeterminada), la tabla base puede incluir un máximo de columnas, pero éstas deben filtrarse del artículo para que se publique un máximo de 246 columnas. Si se utiliza el seguimiento por columnas, la tabla base puede incluir un máximo de 246 columnas. 2 La tabla base puede incluir el máximo de columnas permitidas en la base de datos de publicación (1.024 para SQL Server), pero deben filtrarse del artículo si superan el máximo especificado para el tipo de publicación. 180

181 CAPITULO 6 IMPLANTACIÓN Y COSTOS 181

182 6.1 IMPLANTACIÓN DEL SISTEMA Para empezar a hablar sobre la implantación de sistemas debemos tener muy en claro la diferencia de una implantación y una instalación ya que comúnmente asociamos estos dos procesos como si fueran uno mismo cuando en realidad son dos cosas diferentes. La instalación de un sistema se limita a cargar el sistema en la maquina donde se va utilizar, no hay un trabajo mas allá. Mientras la implantación se basa en una metodología, políticas, procedimientos, etc. Previamente definidos. En informática la implantación de un sistema tiene en cuenta aparte de la propia instalación otros aspectos tan importantes como la formación, comunicación, logística, etc. Tras la implantación, el nuevo sistema debe estar totalmente operativo, tanto las máquinas como las personas. A continuación se presenta un cuadro que detalla los pasos a seguir para una implantación correcta de un sistema. ETAPA DESCRIPCIÓN 1.- Adiestramiento a usuarios Se debe llevar a cabo usando los manuales e instructivos del sistema. 2.- Prueba del sistema por usuarios Es la actividad que reafirma que cada usuario probo e interactúo con el sistema. 3.- Aprobación de resultados de la prueba La aprobación de los resultados de la prueba la deberán hacer los usuarios. 4.- Conversión al sistema Consiste en la implantación de los procedimientos contenidos en los diferentes manuales e instructivos obtenidos en el paso del diseño de sistemas. 5.- Liberación del sistema Consiste en la entrega formal del sistema al usuario por parte de los comités de factibilidad y técnico. Tabla 23: Pasos de implantación 182

183 En nuestro caso el sistema es el primero que tendrá el consultorio medico, por lo que la adaptabilidad de los usuarios a un sistema informático tomara un tiempo mayor que el que podría tomar cuando ya hubo sistemas anteriores implantados. tendrá la obligación de ser un sistema flexible y fácil de manejar que de la confianza al usuario para interactuar con el. Es por eso que se reforzó el tema de la capacitación al personal para que se vaya familiarizándose con el sistema y pueda sacar todas la ventajas que un sistema informático otorga. 6.2 CONFIGURACIÓN Y PRUEBAS REALES DEL SISTEMA Se detalla un esquema simplificado del diagrama de red y telecomunicaciones que tiene implementado el COSENA. Diagrama 7 Diseño Estructural de Redes 183

184 La BDD del sistema médico MedNet se encuentra almacenada en el Servidor SQL 2005 llamado MAPACHE03. El servidor de Correo (Exchange) del COSENA se llama HERCULES02. La aplicación del sistema médico Mednet se encuentra almacenada en el Servidor de ISS (Internet Information Services) debido a que este sistema se basa en interfaces gráficas que se proyectan mediante el web browser. Adicionalmente el diagrama de red del COSENA posee varios servidores más como son un Servidor de Impresión llamado PRINTER y un servidor de Aplicaciones Internas. El COSENA cuenta con aproximadamente 300 usuarios los mismos que tendrán acceso al sistema. Se realizó un cruce de información en el mismo servidor MAPACHE03 de todos los usuarios que tiene la empresa en su BDD de Recursos Humanos con la BDD del sistema MedNet para que de esta manera se registren todos los usuarios del COSENA y garantizar el acceso al sistema médico. Este cruce de información se lo realizó en conjunto con el Administrador de la red del COSENA. A continuación se realizaron las pruebas reales del funcionamiento del sistema con los usuarios y administradores del COSENA. Se validan los siguientes módulos: MENÚ ADMINISTRADOR 1.- Ingresamos al sistema con el usuario creado inicialmente en la BDD del servidor Mapache03 el mismo que tiene el perfil de Administrador. 184

185 2.- A partir del ingreso con este usuario al menú Administración el sistema MedNet empieza a funcionar, en el cual y como primer punto crearemos un usuario que tendrá el perfil de usuario Básico y la creación de un usuario Avanzado con los cuales trabajaremos para comprobar el funcionamiento del sistema. Empezaremos con la creación del usuario Básico y confirmaremos el almacenamiento de datos en la BDD del servidor Mapache

186 Una vez pulsado el botón guardar en el formulario, verificamos que la misma información se grabó en la BDD del servidor Mapache03. De esta manera comprobamos que el formulario Administrador de Usuarios funciona correctamente ejecutándose desde el servidor Mapache03 correspondiente al servidor SQL de BDD. Se realiza el mismo procedimiento para la creación de un usuario con el perfil Avanzado, en este caso el ingreso del Dr. Roberto Mena. 186

187 De igual manera verificamos en la BDD que la información relacionada con usuario avanzado se encuentre almacenada. 3.- En el módulo de Consulta de Usuarios Administrador podemos observar que el sistema muestra la información que se encuentra almacenada en la BDD del servidor Mapache03 y a su vez despliega dicha información por medio del formulario Datos Personales Administrador. 187

188 MENÚ BÁSICO 1.- Realizamos el ingreso a este módulo por medio del usuario creado bajo el perfil de Básico (paciente) que podrá interactuar con el Sistema. 188

189 2.- Una vez que el usuario ingresó al sistema escoge la opción de formulario de Datos Personales Básico donde observa su información personal en forma detallada. 189

190 3.- En la opción de Historia Clínica el usuario puede observar detalladamente la información almacenada por el Médico. Esta información se almacena correctamente en la BDD del servidor Mapache

191 4.- En la opción de Citas el usuario puedo reservar una cita estableciendo un motivo, una prioridad, un horario y una fecha. Esta información se almacena correctamente en la BDD del servidor Mapache03. Una vez realizado este procedimiento el usuario es notificado por medio de un correo electrónico, el mismo que es direccionado desde el Servidor de correo Hercules En la opción de Historial de Citas el usuario puede observar la reservación de su cita realizada. 191

192 6.- En la opción Informe el usuario podrá observar las conclusiones que el médico realizo después de examinado al paciente. Esta información se almacena correctamente en la BDD del servidor Mapache

193 MENÚ AVANZADO 1.- Realizamos el ingreso a este módulo por medio del usuario creado bajo el perfil de Avanzado (Doctor) que podrá interactuar con el Sistema. 2.- El Doctor bajo su perfil puede acceder a ciertas funciones propias de su perfil como son: La consulta de pacientes por medio del nombre de usuario o su cédula de identidad. 3.- Otra de las opciones de este perfil es la de Consulta de Citas donde el Doctor puede visualizar las citas diarias, anteriores y posteriores a la fecha actual (para realizar esta búsqueda se maneja el esquema de filtrados). 193

194 Dentro de esta opción el Doctor tiene la potestad de confirmar una cita realizando la marcación mediante un check box. 4.- Una de las opciones sobresalientes que posee este sistema es que bajo el perfil Avanzado el Doctor puede tipiar directamente la receta y mandarla a imprimir. El sistema está configurado para que tome la impresora predeterminada o en su defecto direccionar al servidor de impresión que tenga autorizado. 5.- De igual manera la opción de Examen le permite al Doctor realizar el mismo procedimiento anterior, es decir, tipiar el examen y mandarlo a imprimir directamente. 194

195 6.- Una de las opciones más importantes de este sistema es la digitalización de la información de la historia clínica de un paciente, es decir, la migración de datos de un papel a un computador. Donde el Doctor en base a un formulario detallado ingresa la información relacionada a cada paciente. El sistema dentro de este formulario carga automáticamente la lista de todos los pacientes que tiene almacenado en al BDD. 195

196 7.- Por último el Doctor bajo su perfil podrá redactar los informes respectivos de sus pacientes estableciendo una fecha. Esta información se almacenará en la BDD del servidor MAPACHE ESTIMACIÓN DE RENDIMIENTO (REAL) Una vez realizadas las pruebas reales del sistema se estableció los porcentajes de rendimiento totales donde se obtuvo los siguientes resultados: PROCESO Ingreso por primera vez al sistema Ingresos posteriores al sistema Almacenamiento de información a la BDD Consulta de información a la BDD Confirmación de las citas al correo electrónico DURACION 3 5 segundos aprox. 1 2 segundos aprox. 1 2 segundos aprox. 1-2 segundos aprox. <= 8 segundos Tabla 24: Estimación Rendimiento Real 196

197 Tomando en cuenta que no se presentó ningún inconveniente con la transmisión de datos por la red (100 Mbps). Tiempo (seg) Procesos Ingreso por primera vez al sistema (simulado) Ingreso por primera vez al sistema (real) Diagrama 8 Ingreso Por Primera Vez Al Sistema Simulado VS Real Tiempo (seg) Procesos Ingresos posteriores al sistema (simulado) Ingresos posteriores al sistema (real) Diagrama 9 Ingresos Posteriores Al Sistema VS Real 197

198 3 2.5 Tiempo (seg) Almacenamiento de información a la BDD (simulado) Almacenamiento de información a la BDD (real) Procesos Diagrama 10 Almacenamiento De Información a la BDD Simulando VS Real Tiempo (seg) 1 Consulta de información a la BDD (simulado) Consulta de información a la BDD (real) Procesos Diagrama 11 Consulta De La Información a La BDD Simulado VS Real 198

199 10 Tiempo (seg) Confirmación de las citas al correo electrónico (simulado) Confirmación de las citas al correo electrónico (real) Procesos Diagrama 12 Confirmación De Citas Al e-amil Simulado VS Real 6.4 IMPLANTACIÓN Y CONFIGURACIÓN DEFINITIVA Como vimos en el capitulo 6.1 la ultima etapa para la implantación del sistema es la liberación del software como tal, ahora que ya se encuentra implantado y se ha podido dar una capacitación al personal que va a administrar para que este a su vez replique a todo el personal que entrará a interactuar con el sistema, podremos hablar de la implantación y configuración definitiva en base al feedback por parte de los usuarios que día a día interactúan con, es muy pronto para que cada usuario emita un criterio en base a la funcionalidad del sistema, esperamos que no haya inconvenientes y que cada usuario sepa acoplarse lo mas rápido posible a una automatización del proceso medico. De igual forma al realizar la implantación del sistema en los equipos y servidores del COSENA contamos con mayores seguridades y un tiempo de respuesta más rápido debido a la inversión en tecnología presente en dicha institución lo cual nos facilita que nuestro sistema trabaje de forma mas liberada de recursos y eficientemente. La estructuración de equipos informáticos en el COSENA la podemos revisar en el diagrama

200 6.5 ESTIMACIÓN Y ANÁLISIS DE COSTOS La estimación es una pequeña planeación sobre que es lo que va a ser mi proyecto. Una de las actividades cruciales del proceso de gestión del proyecto de software es la planificación. Cuando se planifica un proyecto de software se tiene que obtener estimaciones de esfuerzo humano requerido, de la duración cronológica del esfuerzo humano requerido, de la duración cronológica del proyecto y del costo. Pero en muchos de los casos las estimaciones se hacen valiéndose de la experiencia pasada como única guía. Si un proyecto es bastante similar en tamaño y funcionamiento entonces podremos partir de ese proyecto como guía para aproximadamente distribuir los esfuerzos en las diversas etapas de desarrollo del software. En nuestro caso hemos consultado algunos proyectos similares pero que ofrecen un alcance mayor es decir que su enfoque esta para clínicas y hospitales con grandes demandas de información. Por ejemplo vamos a citar a Software de Gestión para Consultorios Médicos desarrollado por la empresa Grande y Asociados. Este es un sistema que ofrece la administración de los siguientes módulos: - Historias Clínicas - Pacientes - Sala de Espera - Configuración de Consultorios - Modulo Administrativo Contable - Central de Consultas. Como podemos observar, es un sistema que maneja parte administrativa y parte contable lo que lo hace más robusto y por tanto su costo también será un punto para considerar. Software de Gestión para Consultorios Médicos esta bordeando los $540 y el punto de contacto es su pagina web 200

201 Gráfico 26 Software similares Grandi Y Asociados Más información en: 201

202 Investigando un poco más podemos encontrar variedad en este tipo de sistemas que se promocionan en la Web, es así que también encontramos a SISTEMA MODULAR INTEGRADO PARA PRESTADORES DE SERVICIOS DE SALUD (BIOCOM). Sistema que ofrece los siguientes módulos: - Laboratorio - Turnos - Gestión Documental - Historias Clínicas - Usuarios - Tablas Gráfico 27 Software similares Biocom Más información en: 202

203 Como vemos tiene módulos muy parecidos al sistema anterior por lo que el costo bordea una cifra similar a los $540 del primer sistema. Otro ejemplo de sistemas médicos es el desarrollado por JagarSoft quien creo a Medical Control v2 el cual ofrece módulos como: - Historia Clínica - Agenda de Citas - Administración del Consultorio. Grafico 28 Sofware Similares Medical Control V2 Más información en: 203

204 CAPITULO 7 CONCLUSIONES Y RECOMENDACIONES 204

205 7.1 CONCLUSIONES Al terminar esta tesis que giró en torno a la construcción e implantación de un sistema informático podemos sacar las siguientes conclusiones. 1.- Es común para los sistemas de software volverse ligeramente frágiles después de un tiempo posiblemente 5 años y más aún volverse obsoletos después de los 7 u 8 años. Al construir un sistema intuitivo y práctico hemos pensado en la flexibilidad para que conforme se aumente las necesidades del consultorio medico, pueda fácilmente adaptarse. 2.- La calidad de un software dependerá en gran medida en la planificación previa a la construcción del mismo, se deberá analizar todos los puntos necesarios para obtener un nivel de factibilidad, en caso de que la factibilidad no sea la suficiente es necesario una nueva reestructuración. El éxito de un sistema se lo gana desde el inicio, cuando se construyen las bases correctas para la obtención de los objetivos. 3.- Recolectar todas las necesidades y puntos de vista de las personas que van a interactuar con el sistema es muy importante ya que de esta forma se va construyendo un sistema adaptable al usuario, con este tipo de técnicas se evita que en el futuro el sistema no cumpla con las expectativas del usuario final lo cual indica un fracaso en el desarrollo de software. 4.- La implantación es un proceso que va mas allá de una simple instalación, implantar encierra un conjunto de pasos como la formación, capacitación, comunicación, soporte. Para una correcta y definitiva implantación es muy importante tener un amplio feedback por parte del usuario final cuando este empiece a familiarizarse con el sistema. 205

206 7.2 RECOMENDACIONES Como recomendación que hemos podido rescatar a lo largo de la experiencia de realizar un sistema para el mejoramiento de la calidad de un servicio en una empresa, es el de analizar correctamente la factibilidad de un proyecto de igual forma el análisis de costos tiene un papel muy preponderante si nuestro objetivo es comercializar un producto. El mercado de la informática actualmente es muy competitivo y todo aquel que emprende el duro trabajo de desarrollar un software debe tener muy en claro su competencia y como utilizar las herramientas para ser mas efectivo y eficaz. es un sistema que ha costado recursos para la elaboración del mismo y tenemos en claro cual es el costo de esos recursos, en caso de que en un futuro algún otro consultorio quiera adaptar el como su sistema de manejo de la información y citas estamos en plena capacidad para establecer un precio en base al análisis de mercado y costos realizado para esta tesis. 206

207 CAPITULO 8 GLOSARIO DE TÉRMINOS 207

208 8.1 TERMINOLOGÍAS Autenticación. Identificar correctamente los clientes de la aplicación, entre los que pueden figurar usuarios finales, servicios, procesos o equipos. Autorización. Definir lo que pueden ver y hacer en la aplicación los clientes autenticados. Biometría. Es el análisis de cada uno de los componentes que el individuo tiene en la sangre, los mismos que se establecen por medio de rangos estadísticos. Contexto de seguridad. Es un término genérico usado para referirse a la colección de configuraciones de seguridad que afectan al comportamiento relativo a la seguridad de un proceso o subproceso. Los atributos de la sesión de inicio y el testigo de acceso de un proceso conforman el contexto de seguridad del proceso. Comunicaciones seguras. Garantizar la privacidad y la integridad de los mensajes cuando pasan de una red a otra. Coproparasitario. Exámenes que se le realiza al individuo para determinar el grado de parásitos que contiene dentro del organismo. Delegación. Una forma ampliada de suplantación que permite a un proceso de servidor que trabaja en nombre de un cliente el acceso a recursos de un equipo remoto. Kerberos ofrece esta capacidad de forma nativa en Microsoft Windows 2000 y sistemas operativos posteriores. La suplantación convencional (por ejemplo, la de NTLM) sólo permite un salto de red. Cuando se utiliza la suplantación de NTLM, este salto se usa entre el equipo cliente y el equipo servidor, con lo que se impide el acceso del servidor a otros recursos que no sean los locales durante la suplantación. 208

209 Diastólica. La tensión arterial diastólica se relaciona con el grado de constricción (resistencias periféricas) que tienen las arterias más pequeñas, o arteriolas, en su porción final, dentro de los órganos y tejidos. Fotofluorografía. Se refiere a los exámenes proyectos en radiografías que el paciente se realiza para determinar problemas al interior de su organismo. Glucemia. Medida de concentración de glucosa en el plasma sanguíneo. En ayunas, los niveles normales de glucosa oscilan entre los 70 mg/dl y los 100 mg/dl. Cuando la glucemia es inferior a este umbral se habla de "hipoglucemia"; cuando se encuentra entre los 100 y 125 mg/dl se habla de "glucosa alterada en ayuno", y cuando supera los 126 mg/dl se alcanza la condición de "hiperglucemia". Hercules02. Nombre del servidor de correo (Exchange) que permite la confirmación de las citas al mail de los usuarios. Identidad. Hace referencia a una característica exclusiva de un usuario o servicio que lo identifica. Suele tratarse, por ejemplo, de un nombre de visualización, que a menudo adopta el formato autoridad/nombre de usuario. IIS. Son las siglas de Internet Information Services y hace referencia al servidor de Internet. Inmunizaciones. Es una serie de inyecciones administradas a los niños a diferentes edades para protegerlos contra enfermedades peligrosas de la infancia. Masas palpables. Hace referencia a los posibles tumores o deformidades pronunciadas en el cuerpo que se muestran con facilidad. Mapache03. Nombre del servidor donde se encuentra almacenada físicamente la base de datos del sistema. Printer. Nombre del servidor de impresión donde le permite al Doctor realizar las impresiones de exámenes, recetas, etc. Sistólica. Es la magnitud de la tensión arterial sistólica guarda relación con el volumen de sangre expulsada por el corazón al contraerse (sístole) y de la elasticidad de las arterias más grandes. 209

210 Suplantación. Se trata de la técnica utilizada por una aplicación de servidor para obtener acceso a recursos en nombre de un cliente. El contexto de seguridad del cliente se utiliza para los controles de acceso realizados por el servidor. VDRL. Son exámenes basados en el análisis de enfermedades infecto-contagiosas que el individuo pueda presentar en su organismo. 210

211 ANEXOS 211

212 MANUAL TÉCNICO DEL SISTEMA MEDICO DESARROLLADO PARA EL COSENA 212

213 MODELAMIENTO DE LA BASE DE DATOS DEL SISTEMA MEDICO La Base de Datos del Sistema Médico MedNet se compone de las siguientes tablas, las mismas que se encuentran relacionadas entre sí, reflejando la necesidad del negocio. Las tablas normalizadas del sistema son: NOMENCLATURA NOMBRE DESCRIPCIÓN PCNT Paciente Esta tabla guarda la información de la cédula del usuario. INFR Informe Esta tabla guarda la información de los informes que tiene un paciente. HSCL Historia Clínica Esta tabla guarda la información de la HC del paciente CNST Consulta Esta tabla guarda la información de las consultas realizadas por los usuarios. USRO Usuario Esta tabla guarda la información de los usuarios. CITA Cita Esta tabla guarda la información de las citas realizadas por los usuarios. DPTR Departamento Esta tabla guarda la información de los departamentos del COSENA CRGO Cargo Esta tabla guarda la información de los cargos respectivos de los usuarios. HORA Horario Esta tabla guarda la información de los horarios disponibles para la atención de pacientes. 213

214 DIAGRAMA DEL MODELO LÓGICO DEL SISTEMA HSCL CNSTCDGO CNSTDSCR CNST <pi> CNSTCDGO <pi> I <M > VA40 <M > SOLICIT A PCNT PCNT CDGO <pi> I <M > PCNT CDGO <pi> ES_UN USRO USROCDLA <pi> USRONM BR USROAPLL USRODRCC USROT LFN USROFCNC USROSEXO USROIESS USROT IPO USROESCV USROCRFM USROCNT R USROM AIL USROFOT O USROCDLA <pi> VA10 VA30 VA30 VA50 I VA10 VA1 VA15 VA15 VA15 I VA15 VA40 PIC1 POSEE1 <M > <M > <M > <M > <M > INFRCDGO INFRFCHA INFRDT LL INFR <pi> INFRCDGO <pi> RESERVAR I D VA500 <M > <M > <M > POSEE CITA CIT ACDGO <pi> I CIT AM TVO CIT APRRD CIT AFCHA CIT ACNFR CIT ACDGO <pi> VA200 VA10 VA10 VA10 <M> <M> <M> <M> HSCLCDGO <pi> HSCLANT C HSCLOT EN HSCLINM N HSCLENIN HSCLHSPT HSCLEM BR HSCLPRT S HSCLABRT HSCLACT R HSCLHBT S HSCLANFM HSCLANM N HSCLCNST HSCLNT RC HSCLEST T HSCLPESO HSCLT M BC HSCLPLSO HSCLSST L HSCLDST L HSCLM DIA HSCLPLM C HSCLCBZA HSCLCLLO HSCLGRGN HSCLOJOS HSCLNRIZ HSCLODOS HSCLBOCA HSCLDNT D HSCLT RAX HSCLCRZN HSCLPLM N HSCLM NOS HSCLABDM HSCLM SPL HSCLSNGR HSCLVDRL HSCLGLSM HSCLORNA HSCLCPRP HSCLFT FL HSCLRDLG HSCLESSL HSCLCDGO <pi> I <M > VA40 VA40 VA40 VA40 I I I I VA40 VA40 VA40 VA40 VA40 VA40 F3 F3 F3 F3 I I I VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 VA40 REQUIERE PERTENECE DESEM PENA DPRT DPRT CDGO <pi> I <M > DPRT NM BR VA40 <M > DPRT DSCR VA40 DPRT CDGO <pi> CRGOCDGO CRGODSCR CRGO <pi> CRGOCDGO <pi> I <M > VA40 <M > HORACDGO HORADSCR HORA <pi> CDGOHORA <pi> I <M > VA11 <M > 214

215 DIAGRAMA DEL MODELO FISICO DEL SISTEMA CNST CNST CDGO int <pk> PCNT CDGO int <fk> CNST DSCR varchar(40) FK_CNST _SOLICIT A_PCNT PCNT CDGO USROCDLA PCNT FK_PCNT _ES_UN_USRO USROCDLA DPRT CDGO CRGOCDGO USRONMBR USROAPLL USRODRCC USROT LFN USROFCNC USROSEXO USROIESS USROT IPO USROESCV USROCRFM USROCNT R USROMAIL USROFOT O FK_INFR_POSEE1_PCNT int <pk> varchar(10) <fk> USRO varchar(10) int int varchar(30) varchar(30) varchar(50) int varchar(10) varchar(1) varchar(15) varchar(15) varchar(15) int varchar(15) varchar(40) image <pk> <fk1> <fk2> INFR INFRCDGO PCNT CDGO INFRFCHA INFRDT LL int int datetime varchar(500) <pk> <fk> FK_CIT A_RESERVAR_USRO FK_HSCL_POSEE_PCNT CIT ACDGO USROCDLA HORACDGO CIT AMTVO CIT APRRD CIT AFCHA CIT ACNFR CITA int varchar(10) int varchar(200) varchar(10) varchar(10) varchar(10) <pk> <fk1> <fk2> HSCLCDGO PCNT CDGO HSCLANT C HSCLOT EN HSCLINMN HSCLENIN HSCLHSPT HSCLEMBR HSCLPRT S HSCLABRT HSCLACT R HSCLHBT S HSCLANFM HSCLANMN HSCLCNST HSCLNT RC HSCLEST T HSCLPESO HSCLT MBC HSCLPLSO HSCLSST L HSCLDST L HSCLMDIA HSCLPLM C HSCLCBZA HSCLCLLO HSCLGRGN HSCLOJOS HSCLNRIZ HSCLODOS HSCLBOCA HSCLDNT D HSCLT RAX HSCLCRZN HSCLPLM N HSCLMNOS HSCLABDM HSCLMSPL HSCLSNGR HSCLVDRL HSCLGLSM HSCLORNA HSCLCPRP HSCLFT FL HSCLRDLG HSCLESSL HSCL int <pk> int <fk> varchar(40) varchar(40) varchar(40) varchar(40) int int int int varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) float(3) float(3) float(3) float(3) int int int varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) varchar(40) FK_CIT A_REQUIERE_HORA FK_USRO_PERT ENECE_DPRT FK_USRO_DESEMPENA_CRGO DPRT DPRT CDGO int <pk> DPRT NMBR varchar(40) DPRT DSCR varchar(40) CRGOCDGO CRGODSCR CRGO int <pk> varchar(40) HORACDGO HORADSCR HORA int <pk> varchar(11) 215

216 SCRIPT GENERADO POR EL MODELO FÍSICO PARA LA CREACIÓN DE TABLAS EN LA BASE DE DATOS /*==============================================================*/ /* Database name: CONCEPTUALDATAMODEL_1 */ /* DBMS name: Microsoft SQL Server 2000 */ /* Created on: 14/06/ :47:12 */ /*==============================================================*/ alter table CITA drop constraint FK_CITA_REQUIERE_HORA go alter table CITA drop constraint FK_CITA_RESERVAR_USRO go alter table CNST drop constraint FK_CNST_SOLICITA_PCNT go alter table HSCL drop constraint FK_HSCL_POSEE_PCNT go alter table INFR drop constraint FK_INFR_POSEE1_PCNT go alter table PCNT drop constraint FK_PCNT_ES_UN_USRO go alter table USRO drop constraint FK_USRO_DESEMPENA_CRGO go alter table USRO drop constraint FK_USRO_PERTENECE_DPRT go if exists (select 1 from sysindexes where id = object_id('cita') and name = 'REQUIERE_FK' 216

217 and indid > 0 and indid < 255) drop index CITA.REQUIERE_FK go if exists (select 1 from sysindexes where id = object_id('cita') and name = 'RESERVAR_FK' and indid > 0 and indid < 255) drop index CITA.RESERVAR_FK go if exists (select 1 from sysindexes where id = object_id('cnst') and name = 'SOLICITA_FK' and indid > 0 and indid < 255) drop index CNST.SOLICITA_FK go if exists (select 1 from sysindexes where id = object_id('hscl') and name = 'POSEE_FK' and indid > 0 and indid < 255) drop index HSCL.POSEE_FK go if exists (select 1 from sysindexes where id = object_id('infr') and name = 'POSEE1_FK' and indid > 0 and indid < 255) drop index INFR.POSEE1_FK go if exists (select 1 from sysindexes where id = object_id('pcnt') and name = 'ES_UN_FK' and indid > 0 and indid < 255) drop index PCNT.ES_UN_FK go if exists (select 1 217

218 from sysindexes where id = object_id('usro') and name = 'DESEMPENA_FK' and indid > 0 and indid < 255) drop index USRO.DESEMPENA_FK go if exists (select 1 from sysindexes where id = object_id('usro') and name = 'PERTENECE_FK' and indid > 0 and indid < 255) drop index USRO.PERTENECE_FK go if exists (select 1 from sysobjects where id = object_id('cita') and type = 'U') drop table CITA go if exists (select 1 from sysobjects where id = object_id('cnst') and type = 'U') drop table CNST go if exists (select 1 from sysobjects where id = object_id('crgo') and type = 'U') drop table CRGO go if exists (select 1 from sysobjects where id = object_id('dprt') and type = 'U') drop table DPRT go if exists (select 1 from sysobjects where id = object_id('hora') and type = 'U') drop table HORA go 218

219 if exists (select 1 from sysobjects where id = object_id('hscl') and type = 'U') drop table HSCL go if exists (select 1 from sysobjects where id = object_id('infr') and type = 'U') drop table INFR go if exists (select 1 from sysobjects where id = object_id('pcnt') and type = 'U') drop table PCNT go if exists (select 1 from sysobjects where id = object_id('usro') and type = 'U') drop table USRO go /*==============================================================*/ /* Table: CITA */ /*==============================================================*/ create table CITA ( CITACDGO int not null, USROCDLA varchar(10) not null, HORACDGO int not null, CITAMTVO varchar(200) not null, CITAPRRD varchar(10) not null, CITAFCHA varchar(10) not null, CITACNFR varchar(10) null, constraint PK_CITA primary key (CITACDGO) ) go /*==============================================================*/ /* Index: RESERVAR_FK */ /*==============================================================*/ create index RESERVAR_FK on CITA ( USROCDLA ) go 219

220 /*==============================================================*/ /* Index: REQUIERE_FK */ /*==============================================================*/ create index REQUIERE_FK on CITA ( HORACDGO ) go /*==============================================================*/ /* Table: CNST */ /*==============================================================*/ create table CNST ( CNSTCDGO int not null, PCNTCDGO int not null, CNSTDSCR varchar(40) not null, constraint PK_CNST primary key (CNSTCDGO) ) go /*==============================================================*/ /* Index: SOLICITA_FK */ /*==============================================================*/ create index SOLICITA_FK on CNST ( PCNTCDGO ) go /*==============================================================*/ /* Table: CRGO */ /*==============================================================*/ create table CRGO ( CRGOCDGO int not null, CRGODSCR varchar(40) not null, constraint PK_CRGO primary key (CRGOCDGO) ) go /*==============================================================*/ /* Table: DPRT */ /*==============================================================*/ create table DPRT ( DPRTCDGO int not null, DPRTNMBR varchar(40) not null, DPRTDSCR varchar(40) null, constraint PK_DPRT primary key (DPRTCDGO) ) go /*==============================================================*/ /* Table: HORA */ 220

221 /*==============================================================*/ create table HORA ( HORACDGO int not null, HORADSCR varchar(11) not null, constraint PK_HORA primary key (HORACDGO) ) go /*==============================================================*/ /* Table: HSCL */ /*==============================================================*/ create table HSCL ( HSCLCDGO int not null, PCNTCDGO int not null, HSCLANTC varchar(40) null, HSCLOTEN varchar(40) null, HSCLINMN varchar(40) null, HSCLENIN varchar(40) null, HSCLHSPT int null, HSCLEMBR int null, HSCLPRTS int null, HSCLABRT int null, HSCLACTR varchar(40) null, HSCLHBTS varchar(40) null, HSCLANFM varchar(40) null, HSCLANMN varchar(40) null, HSCLCNST varchar(40) null, HSCLNTRC varchar(40) null, HSCLESTT float(3) null, HSCLPESO float(3) null, HSCLTMBC float(3) null, HSCLPLSO float(3) null, HSCLSSTL int null, HSCLDSTL int null, HSCLMDIA int null, HSCLPLMC varchar(40) null, HSCLCBZA varchar(40) null, HSCLCLLO varchar(40) null, HSCLGRGN varchar(40) null, HSCLOJOS varchar(40) null, HSCLNRIZ varchar(40) null, HSCLODOS varchar(40) null, HSCLBOCA varchar(40) null, HSCLDNTD varchar(40) null, HSCLTRAX varchar(40) null, HSCLCRZN varchar(40) null, HSCLPLMN varchar(40) null, HSCLMNOS varchar(40) null, HSCLABDM varchar(40) null, HSCLMSPL varchar(40) null, HSCLSNGR varchar(40) null, HSCLVDRL varchar(40) null, HSCLGLSM varchar(40) null, HSCLORNA varchar(40) null, HSCLCPRP varchar(40) null, HSCLFTFL varchar(40) null, 221

222 HSCLRDLG varchar(40) null, HSCLESSL varchar(40) null, constraint PK_HSCL primary key (HSCLCDGO) ) go /*==============================================================*/ /* Index: POSEE_FK */ /*==============================================================*/ create index POSEE_FK on HSCL ( PCNTCDGO ) go /*==============================================================*/ /* Table: INFR */ /*==============================================================*/ create table INFR ( INFRCDGO int not null, PCNTCDGO int not null, INFRFCHA datetime not null, INFRDTLL varchar(500) not null, constraint PK_INFR primary key (INFRCDGO) ) go /*==============================================================*/ /* Index: POSEE1_FK */ /*==============================================================*/ create index POSEE1_FK on INFR ( PCNTCDGO ) go /*==============================================================*/ /* Table: PCNT */ /*==============================================================*/ create table PCNT ( PCNTCDGO int not null, USROCDLA varchar(10) not null, constraint PK_PCNT primary key (PCNTCDGO) ) go /*==============================================================*/ /* Index: ES_UN_FK */ /*==============================================================*/ create index ES_UN_FK on PCNT ( USROCDLA ) go 222

223 /*==============================================================*/ /* Table: USRO */ /*==============================================================*/ create table USRO ( USROCDLA varchar(10) not null, DPRTCDGO int not null, CRGOCDGO int not null, USRONMBR varchar(30) not null, USROAPLL varchar(30) not null, USRODRCC varchar(50) null, USROTLFN int null, USROFCNC varchar(10) null, USROSEXO varchar(1) not null, USROIESS varchar(15) null, USROTIPO varchar(15) not null, USROESCV varchar(15) null, USROCRFM int null, USROCNTR varchar(15) null, USROMAIL varchar(40) null, USROFOTO image null, constraint PK_USRO primary key (USROCDLA) ) go /*==============================================================*/ /* Index: PERTENECE_FK */ /*==============================================================*/ create index PERTENECE_FK on USRO ( DPRTCDGO ) go /*==============================================================*/ /* Index: DESEMPENA_FK */ /*==============================================================*/ create index DESEMPENA_FK on USRO ( CRGOCDGO ) go alter table CITA add constraint FK_CITA_REQUIERE_HORA foreign key (HORACDGO) references HORA (HORACDGO) go alter table CITA add constraint FK_CITA_RESERVAR_USRO foreign key (USROCDLA) references USRO (USROCDLA) go alter table CNST 223

224 add constraint FK_CNST_SOLICITA_PCNT foreign key (PCNTCDGO) references PCNT (PCNTCDGO) go alter table HSCL add constraint FK_HSCL_POSEE_PCNT foreign key (PCNTCDGO) references PCNT (PCNTCDGO) go alter table INFR add constraint FK_INFR_POSEE1_PCNT foreign key (PCNTCDGO) references PCNT (PCNTCDGO) go alter table PCNT add constraint FK_PCNT_ES_UN_USRO foreign key (USROCDLA) references USRO (USROCDLA) go alter table USRO add constraint FK_USRO_DESEMPENA_CRGO foreign key (CRGOCDGO) references CRGO (CRGOCDGO) go alter table USRO add constraint FK_USRO_PERTENECE_DPRT foreign key (DPRTCDGO) references DPRT (DPRTCDGO) go 224

225 CREACIÓN DE DOMINIOS Todos los atributos de este Proyecto funcionan a base de dominios los cuales son: USUARIO (USRO) DOMINIO NOMBRE CODIGO TIPO DE DATO Cédula USROCDLA USROCDLA VA10 Nombre USRONMBR USRONMBR VA30 Apellido USROAPLL USROAPLL VA30 Dirección USRODRCC USRODRCC VA50 Teléfono USROTLFN USROTLFN I Fecha Nacimiento USROFCNC USROFCNC VA10 Sexo USROSEXO USROSEXO VA1 Nro. IESS USROIESS USROIESS VA15 Tipo USROTIPO USROTIPO VA15 Estado Civil USROESCV USROESCV VA15 Cargas Familiares USROCRFM USROCRFM I Contraseña USROCNTR USROCNTR VA15 Correo electrónico USROMAIL USROMAIL VA40 Foto USROFOTO USROFOTO PIC1 DEPARTAMENTO (DPRT) DOMINIO NOMBRE CODIGO TIPO DE DATO Código DPRTCDGO DPRTCDGO I Nombre DPRTNMBR DPRTNMBR VA40 Descripción DPRTDSCR DPRTDSCR VA40 CARGO (CDGO) DOMINIO NOMBRE CODIGO TIPO DE DATO Código CRGOCDGO CRGOCDGO I Descripción CRGODSCR CRGODSCR VA40 HORARIO (HORA) DOMINIO NOMBRE CODIGO TIPO DE DATO Código HORACDGO HORACDGO I Descripción HORADSCR HORADSCR VA11 225

226 CITA (CITA) DOMINIO NOMBRE CODIGO TIPO DE DATO Código CITACDGO CITACDGO I Motivo CITAMTVO CITAMTVO VA200 Prioridad CITAPRRD CITAPRRD VA10 Fecha CITAFCHA CITAFCHA VA10 Confirmación CITACNFR CITACNFR VA10 PACIENTE (PCNT) DOMINIO NOMBRE CODIGO TIPO DE DATO Código PCNTCDGO PCNTCDGO I INFORME (INFR) DOMINIO NOMBRE CODIGO TIPO DE DATO Código INFRCDGO INFRCDGO I Fecha INFRFCHA INFRFCHA D Detalle INFRDTLL INFRDTLL VA500 CONSULTA (CNST) DOMINIO NOMBRE CODIGO TIPO DE DATO Código CNSTCDGO CNSTCDGO I Descripción CNSTDSCR CNSTDSCR VA40 HISTORIA CLINICA (HSCL) DOMINIO NOMBRE CODIGO TIPO DE DATO Código HSCLCDGO HSCLCDGO I Antecedentes HSCLANTC HSCLANTC VA40 Otras Enfermedades HSCLOTEN HSCLOTEN VA40 Inmunizaciones Recibidas HSCLINMN HSCLINMN VA40 Enfermedades infancia HSCLENIN HSCLENIN VA40 Hospitalizaciones HSCLHSPT HSCLHSPT I Embarazos HSCLEMBR HSCLEMBR I Partos HSCLPRTS HSCLPRTS I Abortos HSCLABRT HSCLABRT I Accidentes trabajo HSCLACTR HSCLACTR VA40 Hábitos HSCLHBTS HSCLHBTS VA40 Antecedentes familiares HSCLANFM HSCLANFM VA40 Historia actual HSCLANMN HSCLANMN VA40 Constitución HSCLCNST HSCLCNST VA40 Estado nutricional HSCLNTRC HSCLNTRC VA40 226

227 Estatura HSCLESTT HSCLESTT F3 Peso HSCLPESO HSCLPESO F3 Temperatura bucal HSCLTMBC HSCLTMBC F3 Pulso HSCLPLSO HSCLPLSO F3 Sistolítica HSCLSSTL HSCLSSTL I Diastolítica HSCLDSTL HSCLDSTL I Media HSCLMDIA HSCLMDIA I Piel y mucosas HSCLPLMC HSCLPLMC VA40 Cabeza HSCLCBZA HSCLCBZA VA40 Cuello HSCLCLLO HSCLCLLO VA40 Garganta HSCLGRGN HSCLGRGN VA40 Ojos HSCLOJOS HSCLOJOS VA40 Nariz HSCLNRIZ HSCLNRIZ VA40 Oidos HSCLODOS HSCLODOS VA40 Boca HSCLBOCA HSCLBOCA VA40 Dentadura HSCLDNTD HSCLDNTD VA40 Tórax HSCLTRAX HSCLTRAX VA40 Corazón HSCLCRZN HSCLCRZN VA40 Pulmones HSCLPLMN HSCLPLMN VA40 Manos HSCLMNOS HSCLMNOS VA40 Abdomen HSCLABDM HSCLABDM VA40 Masas palpables HSCLMSPL HSCLMSPL VA40 Sangre biometría HSCLSNGR HSCLSNGR VA40 VDRL HSCLVDRL HSCLVDRL VA40 Glicemia HSCLGLSM HSCLGLSM VA40 Orina HSCLORNA HSCLORNA VA40 Coproparasitario HSCLCPRP HSCLCPRP VA40 Fotofluorografía HSCLFTFL HSCLFTFL VA40 Examenes radiológicos HSCLRDLG HSCLRDLG VA40 Estado Salud HSCLESSL HSCLESSL VA40 DICCIONARIO DE DATOS El dominio CÓDIGO es el atributo que hace referencia a todos los códigos o claves primarias del sistema médico. El dominio DESCRIPCIÓN es el atributo que hace referencia a la descripción de los diferentes servicios que brinda el centro médico. Ej. Descripción del cargo que ocupa un empleado. El dominio CEDULA es el atributo que hace referencia al número de Cédula de Identidad que identifica a cada usuario y a las claves primarias del sistema médico. 227

228 El dominio NOMBRE es el atributo que hace referencia al nombre del usuario y/o paciente. El dominio APELLIDO es el atributo que hace referencia al nombre del usuario y/o paciente. El dominio DIRECCIÓN es el atributo que hace referencia a la dirección del usuario y/o paciente. El dominio TELÉFONO es el atributo que hace referencia al teléfono del usuario y/o paciente. El dominio NÚMERO IESS es el atributo que hace referencia al número del IESS del usuario y/o paciente. El dominio SEXO es el atributo que hace referencia al sexo del usuario y/o paciente. El dominio ESTADO CIVIL es el atributo que hace referencia al estado civil del usuario y/o paciente. El dominio TIPO DE USUARIO es el atributo que hace referencia al tipo de usuario que es, he identificar los permisos de acceso que posee. El dominio CONTRASEÑA es el atributo que hace referencia a la contraseña del usuario y/o paciente para que pueda acceder a la intranet. El dominio CARGAS FAMILIARES es el atributo que hace referencia al número de hijos que tiene el usuario y/o paciente. 228

229 El dominio FECHA DE NACIMIENTO es el atributo que hace referencia a la fecha de nacimiento del usuario y/o paciente. El dominio FECHA es el atributo que hace referencia a la fecha en la que se realizan las citas, exámenes o registros en general. El dominio DETALLE es le atributo que hace referencia al detalle del informe médico que el doctor realiza a sus pacientes. El dominio MOTIVO es le atributo que hace referencia a la razón por las cual el usuario solicita una cita con el médico. El dominio PRIORIDAD es le atributo que hace referencia al grado de prioridad o de urgencia que tenga el usuario de ser atendido por el médico. El dominio ANTECEDENTES PERSONALES es el atributo que hace referencia a los antecedentes que pueda tener el paciente al momento de hacerse un examen. (Esta información es parte del formulario que el médico realiza como procedimiento para la realización de un examen). El dominio ANTECEDENTES SOCIALES es el atributo que hace referencia a los antecedentes sociales o de entorno que pueda tener el paciente al momento de hacerse un examen. (Esta información es parte del formulario que el médico realiza como procedimiento para la realización de un examen). El dominio ANTECEDENTES OBSTÉTRICOS es el atributo que hace referencia a los antecedentes médicos obstétricos que pueda tener el paciente al momento de hacerse un examen. (Esta información es parte del formulario que el médico realiza como procedimiento para la realización de un examen). 229

230 El dominio TEMPERATURA es el atributo que hace referencia a la temperatura actual que tiene el paciente al momento de hacerse un examen. (Esta información es parte del formulario que el médico realiza como procedimiento para la realización de un examen). El dominio PULSO es el atributo que hace referencia al pulso actual que tiene el paciente al momento de hacerse un examen. (Esta información es parte del formulario que el médico realiza como procedimiento para la realización de un examen). El dominio TENSIÓN ARTERIAL es el atributo que hace referencia a la tensión arterial actual que tiene el paciente al momento de hacerse un examen. (Esta información es parte del formulario que el médico realiza como procedimiento para la realización de un examen). El dominio ENFERMEDADES ACTUALES es el atributo que hace referencia a las posibles enfermedades actuales el paciente pueda tener al momento de hacerse un examen. (Esta información es parte del formulario que el médico realiza como procedimiento para la realización de un examen). El dominio REVISIÓN SISTEMAS es el atributo que hace referencia a todos posibles diagnósticos o tratamientos previos que el paciente hubiera tenido hasta el momento de realizarse un nuevo examen. (Esta información es parte del formulario que el médico realiza como procedimiento para la realización de un examen). El dominio DIAGNOSTICO PROVISIONAL es el atributo que hace referencia a los posibles diagnósticos o causas a las dolencias del paciente que pueda tener una vez analizado los respectivos exámenes. (Esta información es parte del formulario que el médico realiza como procedimiento para la realización de un examen). 230

231 El dominio DIAGNOSTICO DEFINITIVO es el atributo que hace referencia a la conclusión final del médico después de haber de haber analizado detenidamente todos los exámenes correspondientes, además en este dominio se detalla el tratamiento o solución a las dolencias que pueda tener el paciente. (Esta información es parte del formulario que el médico realiza como procedimiento para la realización de un examen). El dominio INFORME DE DETALLE MEDICO es el atributo que hace referencia al informe final que el médico realiza después de haber analizado y diagnosticado al paciente, este informe será el documento que el paciente recibirá por parte del médico y también será anexado a la historia clínica. 231

232 DISEÑO DE INTERFACES Y CÓDIGO FUENTE Interfaz del Menú de Registro Código Fuente Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlClient.SqlParameter Partial Class Login Inherits System.Web.UI.Page Private sqlconnection As SqlConnection Private SqlCommand As SqlCommand Private sqldatareader As SqlDataReader Private USROPSSW As String Private USROCNTR As String Private USRONAMES As String Private USROTYPE As String Private USROMAIL As String Private PCNTCDGO As String Private USROCDLA As String Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click USROPSSW = TextBox2.Text USROCDLA = TextBox1.Text sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connectio 232

233 n=yes") SqlCommand = New SqlCommand("select USRO.USROCDLA,USRO.USRONMBR,USRO.USROAPLL,USRO.USROCNTR,USRO.USR OTIPO,USRO.USROMAIL,PCNT.PCNTCDGO from USRO,PCNT where USRO.USROCDLA=PCNT.USROCDLA and USRO.USROCDLA=@USROCDLA", sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@USROCDLA", USROCDLA)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader sqldatareader.read() If sqldatareader.hasrows = True Then USRONAMES = sqldatareader("usronmbr").tostring + " " + sqldatareader("usroapll").tostring USROCNTR = sqldatareader("usrocntr").tostring USROTYPE = sqldatareader("usrotipo").tostring USROMAIL = sqldatareader("usromail").tostring PCNTCDGO = sqldatareader("pcntcdgo").tostring sqldatareader.close() If HiddenField1.Value.Equals("False") Then If USROCNTR.Equals("") Then HiddenField1.Value = "True" Label2.Text = "Contraseña:" Label3.Visible = True TextBox3.Visible = True CompareValidator1.Enabled = True ElseIf USROCNTR.Equals(USROPSSW) Then 'redirect to main page Label5.Text = "La contraseña es correcta" Session("USROCDLA") = USROCDLA Session("USRONAMES") = USRONAMES Session("USROTYPE") = USROTYPE Session("PCNTCDGO") = PCNTCDGO If USROTYPE.Equals("Administrador") Then Page.Response.Redirect("Administrador.aspx") ElseIf USROTYPE.Equals("Avanzado") Then Page.Response.Redirect("Avanzado.aspx") Else Session("USROMAIL") = USROMAIL Page.Response.Redirect("Basico.aspx") End If Else Image2.Visible = True Label5.Text = "La contraseña no es valida!!" TextBox2.Text = "" End If Else SqlCommand = New SqlCommand("update USRO set USROCNTR=@USROCNTR where USROCDLA=@USROCDLA", sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@USROCNTR", USROPSSW)) SqlCommand.Parameters.Add(New SqlParameter("@USROCDLA", USROCDLA)) SqlCommand.ExecuteNonQuery() SqlCommand.Connection.Close() TextBox1.Text = "" 233

234 TextBox2.Text = "" HiddenField1.Value = "False" Label3.Visible = False TextBox3.Visible = False CompareValidator1.Enabled = False Page.Response.Redirect("Login.aspx") End If End If sqldatareader.close() sqlconnection.close() End Sub End Class Interfaz Principal del Menú Administrador 234

235 Código Fuente Partial Class Avanzado Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Administrador")) Then Label1.Text = Session("USRONAMES") Else Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If End Sub Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LinkButton1.Click Session.RemoveAll() Page.Response.Redirect("Login.aspx") End Sub Protected Sub btnconsultar_click(byval sender As Object, ByVal e As System.EventArgs) Handles btnconsultar.click End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub End Class 235

236 Interfaz de Administración de Usuarios del menú Administrador Código Fuente Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlClient.SqlParameter Partial Class Agregar Inherits System.Web.UI.Page Private sqlconnection As SqlConnection Private sqlconnectionaux As SqlConnection Private sqldataadapter As SqlDataAdapter Private datset As DataSet Private sqldatareader As SqlDataReader Private sqldatareaderaux As SqlDataReader Private sqlcommand As SqlCommand Private sqlcommandaux As SqlCommand Private userexist As Boolean 236

237 Private DPRTCDGO As String Private CRGOCDGO As String Private CRGODSCR As String Private DPRTNMBR As String Private USROSEXO As String Private PCNTCDGO As Integer Private USROCDLA As String Private USROMAIL As String Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connectio n=yes") If HiddenField1.Value.Equals("False") Then sqlcommand = New SqlCommand("insert into USRO(CRGOCDGO,USROCDLA,USROIESS,USRONMBR,USROAPLL,USROTIPO,USROF CNC,DPRTCDGO,USRODRCC,USROTLFN,USROSEXO,USROESCV,USROCRFM,USROMA IL) values(@crgocdgo,@usrocdla,@usroiess,@usronmbr,@usroapll,@usroti PO,@USROFCNC,@DPRTCDGO,@USRODRCC,@USROTLFN,@USROSEXO,@USROESCV,@ USROCRFM,@USROMAIL)", sqlconnection) Else sqlcommand = New SqlCommand("update USRO set CRGOCDGO=@CRGOCDGO,USROIESS=@USROIESS,USRONMBR=@USRONMBR,USROAPL L=@USROAPLL,USROTIPO=@USROTIPO,USROFCNC=@USROFCNC,DPRTCDGO=@DPRT CDGO,USRODRCC=@USRODRCC,USROTLFN=@USROTLFN,USROSEXO=@USROSEXO,US ROESCV=@USROESCV,USROCRFM=@USROCRFM,USROMAIL=@USROMAIL where USROCDLA=@USROCDLA", sqlconnection) End If sqlcommand.parameters.add(new SqlParameter("@USROCDLA", TextBox1.Text)) sqlcommand.parameters.add(new SqlParameter("@USRONMBR", TextBox2.Text)) sqlcommand.parameters.add(new SqlParameter("@USROAPLL", TextBox3.Text)) sqlcommand.parameters.add(new SqlParameter("@USROTIPO", DropDownList6.SelectedItem.ToString)) sqlcommand.parameters.add(new SqlParameter("@USROFCNC", TextBox4.Text)) sqlcommand.parameters.add(new SqlParameter("@USROIESS", TextBox5.Text)) sqlcommandaux = New SqlCommand("select DPRTCDGO from DPRT where DPRTNMBR=@DPRTNMBR", sqlconnection) sqlcommandaux.parameters.add(new SqlParameter("@DPRTNMBR", DropDownList4.SelectedItem.ToString)) sqlconnection.open() sqldatareaderaux = sqlcommandaux.executereader() sqldatareaderaux.read() DPRTCDGO = sqldatareaderaux("dprtcdgo").tostring sqldatareaderaux.close() sqlcommand.parameters.add(new SqlParameter("@DPRTCDGO", DPRTCDGO)) 237

238 sqlcommandaux = New SqlCommand("select CRGOCDGO from CRGO where CRGODSCR=@CRGODSCR", sqlconnection) sqlcommandaux.parameters.add(new SqlParameter("@CRGODSCR", DropDownList5.SelectedItem.ToString)) sqldatareaderaux = sqlcommandaux.executereader() sqldatareaderaux.read() CRGOCDGO = sqldatareaderaux("crgocdgo").tostring sqldatareaderaux.close() sqlcommand.parameters.add(new SqlParameter("@CRGOCDGO", CRGOCDGO)) sqlcommand.parameters.add(new SqlParameter("@USRODRCC", TextBox6.Text)) sqlcommand.parameters.add(new SqlParameter("@USROTLFN", TextBox7.Text)) If (DropDownList1.SelectedItem.ToString.Equals("Hombre")) Then USROSEXO = "M" Else USROSEXO = "F" End If sqlcommand.parameters.add(new SqlParameter("@USROSEXO", USROSEXO)) sqlcommand.parameters.add(new SqlParameter("@USROESCV", DropDownList2.SelectedItem.ToString)) sqlcommand.parameters.add(new SqlParameter("@USROCRFM", DropDownList3.SelectedItem.ToString)) sqlcommand.parameters.add(new SqlParameter("@USROMAIL", TextBox8.Text)) sqlcommand.executenonquery() If HiddenField1.Value.Equals("False") Then sqlcommand = New SqlCommand("insert into PCNT(USROCDLA) values(@usrocdla)", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@USROCDLA", TextBox1.Text)) sqlcommand.executenonquery() End If sqlcommand.connection.close() TextBox1.Enabled = True TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" TextBox7.Text = "" TextBox8.Text = "" DropDownList1.SelectedValue = "Hombre" DropDownList2.SelectedValue = "Soltero/a" DropDownList3.SelectedValue = "0" DropDownList6.SelectedValue = "Basico" Button1.Enabled = False Button2.Enabled = False 238

239 End Sub Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connectio n=yes") sqlcommand = New SqlCommand("delete from PCNT where USROCDLA=@USROCDLA", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@USROCDLA", TextBox1.Text)) sqlcommand.connection.open() sqlcommand.executenonquery() sqlcommand.connection.close() sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connectio n=yes") sqlcommand = New SqlCommand("delete from USRO where USROCDLA=@USROCDLA", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@USROCDLA", TextBox1.Text)) sqlcommand.connection.open() sqlcommand.executenonquery() sqlcommand.connection.close() TextBox1.Enabled = True TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" TextBox7.Text = "" TextBox8.Text = "" DropDownList1.SelectedValue = "Hombre" DropDownList2.SelectedValue = "Soltero/a" DropDownList3.SelectedValue = "0" DropDownList6.SelectedValue = "Basico" End Sub Protected Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connectio n=yes") sqlcommand = New SqlCommand("select * from USRO where USROCDLA=@USROCDLA", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@USROCDLA", TextBox1.Text)) sqlconnection.open() sqldatareader = sqlcommand.executereader() sqldatareader.read() Button1.Enabled = True If sqldatareader.hasrows = True Then HiddenField1.Value = "True" Button2.Enabled = True TextBox1.Enabled = False TextBox2.Text = sqldatareader("usronmbr").tostring 239

240 TextBox3.Text = sqldatareader("usroapll").tostring TextBox4.Text = sqldatareader("usrofcnc").tostring TextBox5.Text = sqldatareader("usroiess").tostring TextBox8.Text = sqldatareader("usromail").tostring DPRTCDGO = sqldatareader("dprtcdgo").tostring CRGOCDGO = sqldatareader("crgocdgo").tostring TextBox6.Text = sqldatareader("usrodrcc").tostring TextBox7.Text = sqldatareader("usrotlfn").tostring DropDownList1.Text = sqldatareader("usrosexo").tostring DropDownList2.Text = sqldatareader("usroescv").tostring DropDownList3.Text = sqldatareader("usrocrfm").tostring DropDownList6.Text = sqldatareader("usrotipo").tostring sqldatareader.close() sqlcommandaux = New SqlCommand("select DPRTNMBR from DPRT where DPRTCDGO=@DPRTCDGO", sqlconnection) sqlcommandaux.parameters.add(new SqlParameter("@DPRTCDGO", DPRTCDGO)) sqldatareaderaux = sqlcommandaux.executereader() sqldatareaderaux.read() DPRTNMBR = sqldatareaderaux("dprtnmbr").tostring sqldatareaderaux.close() DropDownList4.Text = DPRTNMBR sqlcommandaux = New SqlCommand("select CRGODSCR from CRGO where CRGOCDGO=@CRGOCDGO", sqlconnection) sqlcommandaux.parameters.add(new SqlParameter("@CRGOCDGO", CRGOCDGO)) sqldatareaderaux = sqlcommandaux.executereader() sqldatareaderaux.read() CRGODSCR = sqldatareaderaux("crgodscr").tostring sqldatareaderaux.close() DropDownList5.Text = CRGODSCR sqldatareaderaux.close() Else HiddenField1.Value = "False" Button2.Enabled = False End If sqlconnection.close() End Sub Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click TextBox1.Enabled = True TextBox1.Text = "" TextBox2.Text = "" 240

241 TextBox3.Text = "" TextBox4.Text = "" TextBox5.Text = "" TextBox6.Text = "" TextBox7.Text = "" TextBox8.Text = "" DropDownList1.SelectedValue = "Hombre" DropDownList2.SelectedValue = "Soltero/a" DropDownList3.SelectedValue = "0" DropDownList6.SelectedValue = "Basico" Button1.Enabled = False Button2.Enabled = False End Sub Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button4.Click Page.Response.Redirect("Usuario.aspx") End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Administrador") = False) Then Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If TextBox1.Attributes.Add("autocomplete", "off") End Sub End Class 241

242 Interfaz Consulta de Usuarios del menú Administrador Código Fuente Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlClient.SqlParameter Partial Class _Default Inherits System.Web.UI.Page Private sqlconnection As SqlConnection Private sqlcommand As SqlCommand Private sqldatareader As SqlDataReader Private datatable As DataTable Private query As String Protected Sub btnconsultar_click(byval sender As Object, ByVal e As System.EventArgs) Handles btnconsultar.click If (DropDownList1.SelectedItem.ToString.Equals("Cédula")) Then sqlcommand = New SqlCommand("select USROCDLA,USRONMBR,USROAPLL from USRO where USROCDLA=@USROCDLA") sqlcommand.parameters.add(new SqlParameter("@USROCDLA", TextBox1.Text)) Else sqlcommand = New SqlCommand("select USROCDLA,USRONMBR,USROAPLL from USRO where USROAPLL=@USROAPLL") sqlcommand.parameters.add(new SqlParameter("@USROAPLL", TextBox1.Text)) End If allusers(sqlcommand) End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As 242

243 System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Administrador") = False) Then Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If If HiddenField1.Value.Equals("False") = True Then allusers(new SqlCommand("select USROCDLA,USRONMBR,USROAPLL from USRO")) HiddenField1.Value = "True" End If End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click allusers(new SqlCommand("select USROCDLA,USRONMBR,USROAPLL from USRO")) End Sub Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged Session("USROCDGO") = GridView1.SelectedRow.Cells(1).Text Page.Response.Redirect("DatosPersonalesAdmin.aspx") End Sub Private Sub allusers(byval sqlcommandaux As SqlCommand) sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection= yes") sqlcommand = sqlcommandaux sqlcommand.connection = sqlconnection sqlconnection.open() sqldatareader = sqlcommand.executereader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() End Sub End Class 243

244 Interfaz de Datos Personales del Menú Administrador Código Fuente Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlClient.SqlParameter Partial Class _Default Inherits System.Web.UI.Page Private sqlconnection As SqlConnection Private sqldatareader As SqlDataReader Private sqlcommand As SqlCommand Private USROCDLA As String Private DPRTCDGO As String Private CRGOCDGO As String Private DPRTNMBR As String Private CRGODSCR As String Private URL As String 244

245 Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub Protected Sub Button1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Load End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Administrador")) Then Else Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If Label14.Text = Session("USROCDGO").ToString sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection =yes") sqlcommand = New SqlCommand("select * from USRO where USROCDLA=@USROCDGO", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@USROCDGO", Session("USROCDGO").ToString)) sqlconnection.open() sqldatareader = sqlcommand.executereader() sqldatareader.read() If sqldatareader.hasrows = True Then Label4.Text = sqldatareader("usronmbr").tostring Label17.Text = sqldatareader("usroapll").tostring Label14.Text = sqldatareader("usrocdla").tostring Label15.Text = sqldatareader("usroiess").tostring Label18.Text = sqldatareader("usrofcnc").tostring Label20.Text = sqldatareader("usrodrcc").tostring Label21.Text = sqldatareader("usrotlfn").tostring Label22.Text = sqldatareader("usrosexo").tostring Label23.Text = sqldatareader("usroescv").tostring Label25.Text = sqldatareader("usrocrfm").tostring Label27.Text = sqldatareader("usromail").tostring DPRTCDGO = sqldatareader("dprtcdgo").tostring CRGOCDGO = sqldatareader("crgocdgo").tostring End If sqldatareader.close() sqlcommand = New SqlCommand("select DPRTNMBR from DPRT where DPRTCDGO=@DPRTCDGO", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@DPRTCDGO", DPRTCDGO)) sqldatareader = sqlcommand.executereader() sqldatareader.read() DPRTNMBR = sqldatareader("dprtnmbr").tostring sqldatareader.close() 245

246 Label19.Text = DPRTNMBR sqlcommand = New SqlCommand("select CRGODSCR from CRGO where CRGOCDGO=@CRGOCDGO", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@CRGOCDGO", CRGOCDGO)) sqldatareader = sqlcommand.executereader() sqldatareader.read() CRGODSCR = sqldatareader("crgodscr").tostring sqldatareader.close() Label24.Text = CRGODSCR End Sub End Class Interfaz Principal de Menú Avanzado Código Fuente Partial Class Administrador Inherits System.Web.UI.Page Protected Sub btnconsultar_click(byval sender As Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub 246

247 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Avanzado")) Then Label1.Text = Session("USRONAMES") Else Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If End Sub Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LinkButton1.Click Session.RemoveAll() Page.Response.Redirect("Login.aspx") End Sub Protected Sub Button5_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button5.Click End Sub Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button4.Click End Sub Protected Sub Button6_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button6.Click End Sub End Class 247

248 Interfaz Consulta de Usuarios Avanzado Código Fuente Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlClient.SqlParameter Partial Class _Default Inherits System.Web.UI.Page Private sqlconnection As SqlConnection Private SqlCommand As SqlCommand Private sqldatareader As SqlDataReader Protected Sub btnconsultar_click(byval sender As Object, ByVal e As System.EventArgs) Handles btnconsultar.click sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection= yes") If (listcedula.selecteditem.tostring.equals("cédula")) Then SqlCommand = New SqlCommand("select USROCDLA,USRONMBR,USROAPLL from USRO where USROCDLA=@USROCDLA", sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@USROCDLA", txtcedula.text)) Else SqlCommand = New SqlCommand("select USROCDLA,USRONMBR,USROAPLL from USRO where USROAPLL=@USROAPLL", sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@USROAPLL", txtcedula.text)) End If sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.Dispose() GridView1.DataSource = sqldatareader GridView1.DataBind() 248

249 sqldatareader.close() sqlconnection.close() End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Avanzado")) Then Else Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If If HiddenField1.Value.Equals("False") = True Then sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection= yes") SqlCommand = New SqlCommand("select USROCDLA,USRONMBR,USROAPLL from USRO", sqlconnection) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() HiddenField1.Value = "True" End If End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection= yes") SqlCommand = New SqlCommand("select USROCDLA,USRONMBR,USROAPLL from USRO", sqlconnection) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() End Sub Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged Session("USROCDGO") = GridView1.SelectedRow.Cells(1).Text Page.Response.Redirect("DatosPersonalesAvanzado.aspx") End Sub Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click End Sub End Class 249

250 Interfaz Datos Personales Avanzado Código Fuente Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlClient.SqlParameter Partial Class _Default Inherits System.Web.UI.Page Private sqlconnection As SqlConnection Private sqldatareader As SqlDataReader Private sqlcommand As SqlCommand Private USROCDLA As String Private DPRTCDGO As String Private CRGOCDGO As String Private DPRTNMBR As String Private CRGODSCR As String Private URL As String Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click 250

251 End Sub Protected Sub Button1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Load End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Avanzado")) Then Else Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If Label14.Text = Session("USROCDGO").ToString sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connectio n=yes") sqlcommand = New SqlCommand("select * from USRO where USROCDLA=@USROCDGO", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@USROCDGO", Session("USROCDGO").ToString)) sqlconnection.open() sqldatareader = sqlcommand.executereader() sqldatareader.read() If sqldatareader.hasrows = True Then Label3.Text = sqldatareader("usronmbr").tostring Label16.Text = sqldatareader("usroapll").tostring Label14.Text = sqldatareader("usrocdla").tostring Label15.Text = sqldatareader("usroiess").tostring Label18.Text = sqldatareader("usrofcnc").tostring Label20.Text = sqldatareader("usrodrcc").tostring Label21.Text = sqldatareader("usrotlfn").tostring Label22.Text = sqldatareader("usrosexo").tostring Label23.Text = sqldatareader("usroescv").tostring Label25.Text = sqldatareader("usrocrfm").tostring Label26.Text = sqldatareader("usromail").tostring DPRTCDGO = sqldatareader("dprtcdgo").tostring CRGOCDGO = sqldatareader("crgocdgo").tostring End If sqldatareader.close() sqlcommand = New SqlCommand("select DPRTNMBR from DPRT where DPRTCDGO=@DPRTCDGO", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@DPRTCDGO", DPRTCDGO)) sqldatareader = sqlcommand.executereader() sqldatareader.read() DPRTNMBR = sqldatareader("dprtnmbr").tostring sqldatareader.close() Label19.Text = DPRTNMBR 251

252 sqlcommand = New SqlCommand("select CRGODSCR from CRGO where CRGOCDGO=@CRGOCDGO", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@CRGOCDGO", CRGOCDGO)) sqldatareader = sqlcommand.executereader() sqldatareader.read() CRGODSCR = sqldatareader("crgodscr").tostring sqldatareader.close() Label24.Text = CRGODSCR End Sub End Class Interfaz Consulta de Citas Avanzado Código Fuente Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlClient.SqlParameter Partial Class ConsultarCitas Inherits System.Web.UI.Page Private sqlconnection As SqlConnection Private SqlCommand As SqlCommand Private sqldatareader As SqlDataReader Private CITAFCHA As String Private FCHAINCL As String Private FCHAFNAL As String Private CITACDGO As String Private CITACNFR As String Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Avanzado")) Then 252

253 Else Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If CITACNFR = "True" If HiddenField1.Value.Equals("False") = True Then CITAFCHA = Date.Today.ToShortDateString sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connectio n=yes") SqlCommand = New SqlCommand("select USRONMBR,USROAPLL,CITAMTVO,CITAPRRD,CITAFCHA,CITACNFR,CITACDGO from USRO inner join CITA on USRO.USROCDLA=CITA.USROCDLA and CITAFCHA=@CITAFCHA", sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@CITAFCHA", CITAFCHA)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() HiddenField1.Value = "True" End If End Sub Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged MsgBox(GridView1.SelectedRow.Cells(1).Text) CITACDGO = GridView1.SelectedRow.Cells(1).Text sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connectio n=yes") SqlCommand = New SqlCommand("update CITA set CITACNFR=@CITACNFR where CITACDGO=@CITACDGO", sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@CITACNFR", CITACNFR)) SqlCommand.Parameters.Add(New SqlParameter("@CITACDGO", CITACDGO)) SqlCommand.Connection.Open() SqlCommand.ExecuteNonQuery() SqlCommand.Connection.Close() If (RadioButton1.Checked = True) Then RadioButton1_CheckedChanged(sender, e) Else Button2_Click(sender, e) End If End Sub Protected Sub RadioButton2_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged Label1.Enabled = True 253

254 Label2.Enabled = True TextBox1.Enabled = True TextBox2.Enabled = True Button2.Enabled = True End Sub Protected Sub RadioButton1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged TextBox1.Text = "" TextBox2.Text = "" Label1.Enabled = False Label2.Enabled = False TextBox1.Enabled = False TextBox2.Enabled = False Button2.Enabled = False CITAFCHA = Date.Today.ToShortDateString sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connectio n=yes") SqlCommand = New SqlCommand("select USRONMBR,USROAPLL,CITAMTVO,CITAPRRD,CITAFCHA,CITACNFR,CITACDGO from USRO inner join CITA on USRO.USROCDLA=CITA.USROCDLA and CITAFCHA=@CITAFCHA", sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@CITAFCHA", CITAFCHA)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() End Sub Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click FCHAINCL = TextBox1.Text FCHAFNAL = TextBox2.Text sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connectio n=yes") SqlCommand = New SqlCommand("select USRONMBR,USROAPLL,CITAMTVO,CITAPRRD,CITAFCHA,CITACNFR,CITACDGO from USRO inner join CITA on USRO.USROCDLA=CITA.USROCDLA and CITA.CITAFCHA sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@FCHAINCL", FCHAINCL)) SqlCommand.Parameters.Add(New SqlParameter("@FCHAFNAL", FCHAFNAL)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() End Sub 254

255 Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connectio n=yes") SqlCommand = New SqlCommand("select USRONMBR,USROAPLL,CITAMTVO,CITAPRRD,CITAFCHA,CITACNFR,CITACDGO from USRO inner join CITA on USRO.USROCDLA=CITA.USROCDLA", sqlconnection) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() End Sub End Class Interfaz Redactar Receta Avanzado Código Fuente Imports System.Drawing.Printing Imports System.Drawing Imports System.IO Partial Class Receta Inherits System.Web.UI.Page Private printdocument As New PrintDocument() 255

256 Private printfont As Font Private streamtoprint As StreamReader Private stream As Stream Private fecha As DateTime = DateTime.Now Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button4.Click Try stream = New MemoryStream(System.Text.Encoding.ASCII.GetBytes(TextBox2.Text + vbcrlf + "Fecha:" + TextBox4.Text + vbcrlf + vbcrlf + "Receta:" + vbcrlf + TextBox3.Text + vbcrlf + vbcrlf + "Indicaciones:" + vbcrlf + TextBox1.Text + vbcrlf + vbcrlf + vbcrlf + vbcrlf + TextBox5.Text)) streamtoprint = New StreamReader(stream) printfont = New Font("Arial", 14) AddHandler printdocument.printpage, AddressOf Me.PrintPage printdocument.print() Catch ex As Exception TextBox1.Text = ex.message End Try End Sub Private Sub PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs) Dim linesperpage As Single = 0 Dim ypos As Single = 0 Dim count As Integer = 0 Dim leftmargin As Single = ev.marginbounds.left Dim topmargin As Single = ev.marginbounds.top Dim line As String = Nothing Dim contador As Integer linesperpage = ev.marginbounds.height / printfont.getheight(ev.graphics) contador = 0 While count < linesperpage line = streamtoprint.readline() If line Is Nothing Then Exit While End If ypos = topmargin + count * printfont.getheight(ev.graphics) ev.graphics.drawstring(line, printfont, Brushes.Black, leftmargin, ypos, New StringFormat()) count += 1 End While If Not (line Is Nothing) Then ev.hasmorepages = True Else ev.hasmorepages = False End If End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click 256

257 TextBox2.ReadOnly = False End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Avanzado")) Then Else Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If TextBox4.Text = fecha.toshortdatestring.tostring End Sub Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox4.ReadOnly = False End Sub Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click TextBox5.ReadOnly = False End Sub Protected Sub Button5_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button5.Click End Sub End Class 257

258 Interfaz Historia Clínica Avanzado Código Fuente Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlClient.SqlParameter Partial Class Examen Inherits System.Web.UI.Page Private sqlconnection As SqlConnection Private sqldataadapter As SqlDataAdapter Private sqldatareader As SqlDataReader Private sqldatareaderaux As SqlDataReader Private sqlcommand As SqlCommand Private sqlcommandaux As SqlCommand Private PCNTCDGO As Integer Private USRONMBRAPLL As String Private USROCDLA As String Private HSCLCDGO As String 258

259 Protected Sub btnguardarhistoria_click(byval sender As Object, ByVal e As System.EventArgs) Handles btnguardarhistoria.click USROCDLA = Session("AUXUSROCDLA") PCNTCDGO = Session("AUXPCNTCDGO") sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connect ion=yes") sqlconnection.open() If HiddenField1.Value.Equals("False") Then sqlcommand = New SqlCommand("insert into HSCL(PCNTCDGO,HSCLANTC,HSCLOTEN,HSCLINMN,HSCLENIN,HSCLHSPT,HSC LEMBR,HSCLPRTS,HSCLABRT,HSCLACTR,HSCLHBTS,HSCLANFM,HSCLANMN,HS CLCNST,HSCLNTRC,HSCLESTT,HSCLPESO,HSCLTMBC,HSCLPLSO,HSCLSSTL,H SCLDSTL,HSCLMDIA,HSCLPLMC,HSCLCBZA,HSCLCLLO,HSCLGRGN,HSCLOJOS, HSCLNRIZ,HSCLODOS,HSCLBOCA,HSCLDNTD,HSCLTRAX,HSCLCRZN,HSCLPLMN,HSCLMNOS,HSCLABDM,HSCLMSPL,HSCLSNGR,HSCLVDRL,HSCLGLSM,HSCLORN A,HSCLCPRP,HSCLFTFL,HSCLRDLG,HSCLESSL) values(@pcntcdgo,@hsclantc,@hscloten,@hsclinmn,@hsclenin,@hscl HSPT,@HSCLEMBR,@HSCLPRTS,@HSCLABRT,@HSCLACTR,@HSCLHBTS,@HSCLAN FM,@HSCLANMN,@HSCLCNST,@HSCLNTRC,@HSCLESTT,@HSCLPESO,@HSCLTMBC,@HSCLPLSO,@HSCLSSTL,@HSCLDSTL,@HSCLMDIA,@HSCLPLMC,@HSCLCBZA,@ HSCLCLLO,@HSCLGRGN,@HSCLOJOS,@HSCLNRIZ,@HSCLODOS,@HSCLBOCA,@HS CLDNTD,@HSCLTRAX,@HSCLCRZN,@HSCLPLMN,@HSCLMNOS,@HSCLABDM,@HSCL MSPL,@HSCLSNGR,@HSCLVDRL,@HSCLGLSM,@HSCLORNA,@HSCLCPRP,@HSCLFT FL,@HSCLRDLG,@HSCLESSL)", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@PCNTCDGO", PCNTCDGO)) Else sqlcommandaux = New SqlCommand("select HSCLCDGO from HSCL where PCNTCDGO=@PCNTCDGO", sqlconnection) sqlcommandaux.parameters.add(new SqlParameter("@PCNTCDGO", PCNTCDGO)) sqldatareaderaux = sqlcommandaux.executereader() sqldatareaderaux.read() HSCLCDGO = sqldatareaderaux("hsclcdgo") sqldatareaderaux.close() sqlcommand = New SqlCommand("update HSCL set HSCLANTC=@HSCLANTC,HSCLOTEN=@HSCLOTEN,HSCLINMN=@HSCLINMN,HSCLE NIN=@HSCLENIN,HSCLHSPT=@HSCLHSPT,HSCLEMBR=@HSCLEMBR,HSCLPRTS=@ HSCLPRTS,HSCLABRT=@HSCLABRT,HSCLACTR=@HSCLACTR,HSCLHBTS=@HSCLH BTS,HSCLANFM=@HSCLANFM,HSCLANMN=@HSCLANMN,HSCLCNST=@HSCLCNST,H SCLNTRC=@HSCLNTRC,HSCLESTT=@HSCLESTT,HSCLPESO=@HSCLPESO,HSCLTM BC=@HSCLTMBC,HSCLPLSO=@HSCLPLSO,HSCLSSTL=@HSCLSSTL,HSCLDSTL=@H SCLDSTL,HSCLMDIA=@HSCLMDIA,HSCLPLMC=@HSCLPLMC,HSCLCBZA=@HSCLCB ZA,HSCLCLLO=@HSCLCLLO,HSCLGRGN=@HSCLGRGN,HSCLOJOS=@HSCLOJOS,HS CLNRIZ=@HSCLNRIZ,HSCLODOS=@HSCLODOS,HSCLBOCA=@HSCLBOCA,HSCLDNT D=@HSCLDNTD,HSCLTRAX=@HSCLTRAX,HSCLCRZN=@HSCLCRZN,HSCLPLMN=@HS CLPLMN,HSCLMNOS=@HSCLMNOS,HSCLABDM=@HSCLABDM,HSCLMSPL=@HSCLMSP L,HSCLSNGR=@HSCLSNGR,HSCLVDRL=@HSCLVDRL,HSCLGLSM=@HSCLGLSM,HSC LORNA=@HSCLORNA,HSCLCPRP=@HSCLCPRP,HSCLFTFL=@HSCLFTFL,HSCLRDLG =@HSCLRDLG,HSCLESSL=@HSCLESSL where HSCLCDGO=@HSCLCDGO", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@HSCLCDGO", HSCLCDGO)) End If 259

260 sqlcommand.parameters.add(new DropDownList1.SelectedItem.ToString)) sqlcommand.parameters.add(new TextBox1.Text)) sqlcommand.parameters.add(new TextBox2.Text)) sqlcommand.parameters.add(new TextBox3.Text)) sqlcommand.parameters.add(new DropDownList5.SelectedItem.ToString)) sqlcommand.parameters.add(new DropDownList6.SelectedItem.ToString)) sqlcommand.parameters.add(new DropDownList7.SelectedItem.ToString)) sqlcommand.parameters.add(new DropDownList8.SelectedItem.ToString)) sqlcommand.parameters.add(new TextBox4.Text)) sqlcommand.parameters.add(new DropDownList2.SelectedItem.ToString)) sqlcommand.parameters.add(new TextBox5.Text)) sqlcommand.parameters.add(new TextBox6.Text)) sqlcommand.parameters.add(new DropDownList3.SelectedItem.ToString)) sqlcommand.parameters.add(new DropDownList4.SelectedItem.ToString)) sqlcommand.parameters.add(new TextBox7.Text)) sqlcommand.parameters.add(new TextBox8.Text)) sqlcommand.parameters.add(new TextBox9.Text)) sqlcommand.parameters.add(new TextBox10.Text)) sqlcommand.parameters.add(new TextBox11.Text)) sqlcommand.parameters.add(new TextBox12.Text)) sqlcommand.parameters.add(new TextBox13.Text)) sqlcommand.parameters.add(new TextBox14.Text)) sqlcommand.parameters.add(new TextBox15.Text)) sqlcommand.parameters.add(new TextBox16.Text)) sqlcommand.parameters.add(new 260

261 TextBox17.Text)) sqlcommand.parameters.add(new TextBox18.Text)) sqlcommand.parameters.add(new TextBox20.Text)) sqlcommand.parameters.add(new TextBox19.Text)) sqlcommand.parameters.add(new TextBox21.Text)) sqlcommand.parameters.add(new TextBox22.Text)) sqlcommand.parameters.add(new TextBox23.Text)) sqlcommand.parameters.add(new TextBox24.Text)) sqlcommand.parameters.add(new TextBox25.Text)) sqlcommand.parameters.add(new TextBox26.Text)) sqlcommand.parameters.add(new TextBox27.Text)) sqlcommand.parameters.add(new TextBox28.Text)) sqlcommand.parameters.add(new TextBox29.Text)) sqlcommand.parameters.add(new TextBox30.Text)) sqlcommand.parameters.add(new TextBox31.Text)) sqlcommand.parameters.add(new TextBox32.Text)) sqlcommand.parameters.add(new TextBox33.Text)) sqlcommand.parameters.add(new TextBox34.Text)) sqlcommand.parameters.add(new TextBox35.Text)) sqlcommand.parameters.add(new TextBox36.Text)) sqlcommand.executenonquery() sqlcommand.connection.close() DropDownList9.SelectedIndex() = 0 DropDownList9.Enabled = True DropDownList1.SelectedValue = "Ninguno" TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" DropDownList5.SelectedValue = "0" DropDownList6.SelectedValue = "0" DropDownList7.SelectedValue = "0" DropDownList8.SelectedValue = "0" TextBox4.Text = "" DropDownList2.SelectedValue = "Ninguno" TextBox5.Text = "" TextBox6.Text = "" DropDownList3.SelectedValue = "Atlético" DropDownList4.SelectedValue = "Optimo" 261

262 TextBox7.Text = "" TextBox8.Text = "" TextBox9.Text = "" TextBox10.Text = "" TextBox11.Text = "" TextBox12.Text = "" TextBox13.Text = "" TextBox14.Text = "" TextBox15.Text = "" TextBox16.Text = "" TextBox17.Text = "" TextBox18.Text = "" TextBox19.Text = "" TextBox20.Text = "" TextBox21.Text = "" TextBox22.Text = "" TextBox23.Text = "" TextBox24.Text = "" TextBox25.Text = "" TextBox26.Text = "" TextBox27.Text = "" TextBox28.Text = "" TextBox29.Text = "" TextBox30.Text = "" TextBox31.Text = "" TextBox32.Text = "" TextBox33.Text = "" TextBox34.Text = "" TextBox35.Text = "" TextBox36.Text = "" btnguardarhistoria.enabled = False Button1.Enabled = False End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Avanzado")) Then Else Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click PCNTCDGO = Session("AUXPCNTCDGO") sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connect ion=yes") sqlcommand = New SqlCommand("delete from HSCL where PCNTCDGO=@PCNTCDGO", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@PCNTCDGO", PCNTCDGO)) sqlcommand.connection.open() 262

263 sqlcommand.executenonquery() sqlcommand.connection.close() DropDownList9.SelectedIndex() = 0 DropDownList9.Enabled = True DropDownList1.SelectedValue = "Ninguno" TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" DropDownList5.SelectedValue = "0" DropDownList6.SelectedValue = "0" DropDownList7.SelectedValue = "0" DropDownList8.SelectedValue = "0" TextBox4.Text = "" DropDownList2.SelectedValue = "Ninguno" TextBox5.Text = "" TextBox6.Text = "" DropDownList3.SelectedValue = "Atlético" DropDownList4.SelectedValue = "Optimo" TextBox7.Text = "" TextBox8.Text = "" TextBox9.Text = "" TextBox10.Text = "" TextBox11.Text = "" TextBox12.Text = "" TextBox13.Text = "" TextBox14.Text = "" TextBox15.Text = "" TextBox16.Text = "" TextBox17.Text = "" TextBox18.Text = "" TextBox19.Text = "" TextBox20.Text = "" TextBox21.Text = "" TextBox22.Text = "" TextBox23.Text = "" TextBox24.Text = "" TextBox25.Text = "" TextBox26.Text = "" TextBox27.Text = "" TextBox28.Text = "" TextBox29.Text = "" TextBox30.Text = "" TextBox31.Text = "" TextBox32.Text = "" TextBox33.Text = "" TextBox34.Text = "" TextBox35.Text = "" TextBox36.Text = "" btnguardarhistoria.enabled = False Button1.Enabled = False End Sub Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click DropDownList9.SelectedIndex() = 0 DropDownList9.Enabled = True DropDownList1.SelectedValue = "Ninguno" 263

264 TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" DropDownList5.SelectedValue = "0" DropDownList6.SelectedValue = "0" DropDownList7.SelectedValue = "0" DropDownList8.SelectedValue = "0" TextBox4.Text = "" DropDownList2.SelectedValue = "Ninguno" TextBox5.Text = "" TextBox6.Text = "" DropDownList3.SelectedValue = "Atlético" DropDownList4.SelectedValue = "Optimo" TextBox7.Text = "" TextBox8.Text = "" TextBox9.Text = "" TextBox10.Text = "" TextBox11.Text = "" TextBox12.Text = "" TextBox13.Text = "" TextBox14.Text = "" TextBox15.Text = "" TextBox16.Text = "" TextBox17.Text = "" TextBox18.Text = "" TextBox19.Text = "" TextBox20.Text = "" TextBox21.Text = "" TextBox22.Text = "" TextBox23.Text = "" TextBox24.Text = "" TextBox25.Text = "" TextBox26.Text = "" TextBox27.Text = "" TextBox28.Text = "" TextBox29.Text = "" TextBox30.Text = "" TextBox31.Text = "" TextBox32.Text = "" TextBox33.Text = "" TextBox34.Text = "" TextBox35.Text = "" TextBox36.Text = "" btnguardarhistoria.enabled = False Button1.Enabled = False End Sub Protected Sub DropDownList9_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList9.SelectedIndexChanged USRONMBRAPLL = DropDownList9.SelectedItem().ToString sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connect ion=yes") 'sqlcommand = New SqlCommand("select USRONMBR,USROAPLL,USROCDLA from USRO where USRONMBR+' '+USROAPLL=@USRONMBRAPLL", sqlconnection) sqlcommand = New SqlCommand("select 264

265 USRO.USROCDLA,PCNTCDGO from USRO inner join PCNT on USRO.USROCDLA=PCNT.USROCDLA where USRONMBR+' sqlconnection) sqlcommand.parameters.add(new USRONMBRAPLL)) sqlconnection.open() sqldatareader = sqlcommand.executereader() sqldatareader.read() USROCDLA = sqldatareader("usrocdla") PCNTCDGO = sqldatareader("pcntcdgo") sqldatareader.close() Session("AUXUSROCDLA") = USROCDLA Session("AUXPCNTCDGO") = PCNTCDGO DropDownList9.Enabled = False sqlcommand = New SqlCommand("select * from HSCL where PCNTCDGO=@PCNTCDGO", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@PCNTCDGO", PCNTCDGO)) sqldatareader = sqlcommand.executereader() sqldatareader.read() If sqldatareader.hasrows = True Then HiddenField1.Value = "True" btnguardarhistoria.enabled = True Button1.Enabled = True DropDownList1.Text = sqldatareader("hsclantc").tostring TextBox1.Text = sqldatareader("hscloten").tostring TextBox2.Text = sqldatareader("hsclinmn").tostring TextBox3.Text = sqldatareader("hsclenin").tostring DropDownList5.Text = sqldatareader("hsclhspt").tostring DropDownList6.Text = sqldatareader("hsclembr").tostring DropDownList7.Text = sqldatareader("hsclprts").tostring DropDownList8.Text = sqldatareader("hsclabrt").tostring TextBox4.Text = sqldatareader("hsclactr").tostring DropDownList2.Text = sqldatareader("hsclhbts").tostring TextBox5.Text = sqldatareader("hsclanfm").tostring TextBox6.Text = sqldatareader("hsclanmn").tostring DropDownList3.Text = sqldatareader("hsclcnst").tostring DropDownList4.Text = sqldatareader("hsclntrc").tostring TextBox7.Text = sqldatareader("hsclestt").tostring TextBox8.Text = sqldatareader("hsclpeso").tostring TextBox9.Text = sqldatareader("hscltmbc").tostring TextBox10.Text = sqldatareader("hsclplso").tostring TextBox11.Text = sqldatareader("hsclsstl").tostring TextBox12.Text = sqldatareader("hscldstl").tostring TextBox13.Text = 265

266 sqldatareader("hsclmdia").tostring TextBox14.Text = sqldatareader("hsclplmc").tostring TextBox15.Text = sqldatareader("hsclcbza").tostring TextBox16.Text = sqldatareader("hsclcllo").tostring TextBox17.Text = sqldatareader("hsclgrgn").tostring TextBox18.Text = sqldatareader("hsclojos").tostring TextBox19.Text = sqldatareader("hsclodos").tostring TextBox20.Text = sqldatareader("hsclnriz").tostring TextBox21.Text = sqldatareader("hsclboca").tostring TextBox22.Text = sqldatareader("hscldntd").tostring TextBox23.Text = sqldatareader("hscltrax").tostring TextBox24.Text = sqldatareader("hsclcrzn").tostring TextBox25.Text = sqldatareader("hsclplmn").tostring TextBox26.Text = sqldatareader("hsclmnos").tostring TextBox27.Text = sqldatareader("hsclabdm").tostring TextBox28.Text = sqldatareader("hsclmspl").tostring TextBox29.Text = sqldatareader("hsclsngr").tostring TextBox30.Text = sqldatareader("hsclvdrl").tostring TextBox31.Text = sqldatareader("hsclglsm").tostring TextBox32.Text = sqldatareader("hsclorna").tostring TextBox33.Text = sqldatareader("hsclcprp").tostring TextBox34.Text = sqldatareader("hsclftfl").tostring TextBox35.Text = sqldatareader("hsclrdlg").tostring TextBox36.Text = sqldatareader("hsclessl").tostring Else HiddenField1.Value = "False" btnguardarhistoria.enabled = True Button1.Enabled = False End If sqldatareader.close() sqlconnection.close() End Sub End Class 266

267 Interfaz de Examen Avanzado Código Fuente Imports System.Drawing.Printing Imports System.Drawing Imports System.IO Partial Class Historia_Clinica Inherits System.Web.UI.Page Private printdocument As New PrintDocument() Private printfont As Font Private streamtoprint As StreamReader Private stream As Stream Private fecha As DateTime = DateTime.Now Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Try stream = New MemoryStream(System.Text.Encoding.ASCII.GetBytes(TextBox2.Text + vbcrlf + "Fecha:" + TextBox4.Text + vbcrlf + vbcrlf + "Examen:" + 267

268 vbcrlf + vbcrlf + TextBox3.Text + vbcrlf + vbcrlf + vbcrlf + vbcrlf + TextBox5.Text)) streamtoprint = New StreamReader(stream) printfont = New Font("Arial", 14) AddHandler printdocument.printpage, AddressOf Me.PrintPage printdocument.print() Catch ex As Exception TextBox2.Text = ex.message End Try End Sub Private Sub PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs) Dim linesperpage As Single = 0 Dim ypos As Single = 0 Dim count As Integer = 0 Dim leftmargin As Single = ev.marginbounds.left Dim topmargin As Single = ev.marginbounds.top Dim line As String = Nothing Dim contador As Integer linesperpage = ev.marginbounds.height / printfont.getheight(ev.graphics) contador = 0 While count < linesperpage line = streamtoprint.readline() If line Is Nothing Then Exit While End If ypos = topmargin + count * printfont.getheight(ev.graphics) ev.graphics.drawstring(line, printfont, Brushes.Black, leftmargin, ypos, New StringFormat()) count += 1 End While If Not (line Is Nothing) Then ev.hasmorepages = True Else ev.hasmorepages = False End If End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Avanzado")) Then Else Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If TextBox4.Text = fecha.toshortdatestring.tostring 268

269 End Sub Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox2.ReadOnly = False End Sub Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button4.Click TextBox5.ReadOnly = False End Sub Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click TextBox4.ReadOnly = False End Sub Protected Sub Button5_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button5.Click End Sub End Class 269

270 Interfaz Redactar Informe Medico Avanzado Código Fuente Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlClient.SqlParameter Partial Class Informe_Admin Inherits System.Web.UI.Page Private sqlconnection As SqlConnection Private SqlCommand As SqlCommand Private sqldatareader As SqlDataReader Private USRONMBRAPLL As String Private PCNTCDGO As String Private INFRFCHA As String Private INFRDTLL As String Private USROCDLA As String Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Avanzado")) Then 270

271 Else Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If Calendar1.SelectedDate = Calendar1.TodaysDate End Sub Protected Sub btnguardarinforme_click(byval sender As Object, ByVal e As System.EventArgs) Handles btnguardarinforme.click USRONMBRAPLL = DropDownList1.SelectedItem.ToString sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connect ion=yes") SqlCommand = New SqlCommand("select USROCDLA,USRONMBR,USROAPLL from USRO where USRONMBR+' '+USROAPLL=@USRONMBRAPLL", sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@USRONMBRAPLL", USRONMBRAPLL)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader sqldatareader.read() USROCDLA = sqldatareader("usrocdla") sqldatareader.close() SqlCommand.Connection.Close() sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connect ion=yes") SqlCommand = New SqlCommand("select PCNTCDGO,USROCDLA from PCNT where USROCDLA=@USROCDLA", sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@USROCDLA", USROCDLA)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader sqldatareader.read() PCNTCDGO = sqldatareader("pcntcdgo") sqldatareader.close() SqlCommand.Connection.Close() INFRFCHA = Calendar1.TodaysDate.ToShortDateString INFRDTLL = TextBox1.Text sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connect ion=yes") SqlCommand = New SqlCommand("insert into INFR(PCNTCDGO,INFRFCHA,INFRDTLL) values(@pcntcdgo,@infrfcha,@infrdtll)", sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@PCNTCDGO", PCNTCDGO)) SqlCommand.Parameters.Add(New SqlParameter("@INFRFCHA", INFRFCHA)) SqlCommand.Parameters.Add(New SqlParameter("@INFRDTLL", INFRDTLL)) sqlconnection.open() 271

272 SqlCommand.ExecuteNonQuery() sqldatareader.close() SqlCommand.Connection.Close() TextBox1.Text = "" DropDownList1.SelectedIndex = 0 Calendar1.VisibleDate = Date.Today End Sub End Class Interfaz de Menú Básico Código Fuente Partial Class Usuario Inherits System.Web.UI.Page Protected Sub btndatospersonales_click(byval sender As Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Basico")) Then Label1.Text = Session("USRONAMES") Else Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If End Sub Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LinkButton1.Click Session.RemoveAll() 272

273 Page.Response.Redirect("Login.aspx") End Sub Protected Sub btnhistoria_click(byval sender As Object, ByVal e As System.EventArgs) Handles Button2.Click End Sub Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button4.Click End Sub Protected Sub Button5_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button5.Click End Sub End Class Interfaz Datos Personales Básico Código Fuente Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlClient.SqlParameter Partial Class _Default Inherits System.Web.UI.Page 273

274 Private sqlconnection As SqlConnection Private sqldatareader As SqlDataReader Private sqlcommand As SqlCommand Private USROCDLA As String Private DPRTCDGO As String Private CRGOCDGO As String Private DPRTNMBR As String Private CRGODSCR As String Private URL As String Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub Protected Sub Button1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Load End Sub Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Basico")) Then Else Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If Label14.Text = Session("USROCDLA").ToString sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connectio n=yes") sqlcommand = New SqlCommand("select * from USRO where USROCDLA=@USROCDLA", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@USROCDLA", Session("USROCDLA").ToString)) sqlconnection.open() sqldatareader = sqlcommand.executereader() sqldatareader.read() If sqldatareader.hasrows = True Then Label4.Text = sqldatareader("usronmbr").tostring Label17.Text = sqldatareader("usroapll").tostring Label14.Text = sqldatareader("usrocdla").tostring Label15.Text = sqldatareader("usroiess").tostring Label18.Text = sqldatareader("usrofcnc").tostring Label20.Text = sqldatareader("usrodrcc").tostring Label21.Text = sqldatareader("usrotlfn").tostring Label22.Text = sqldatareader("usrosexo").tostring Label23.Text = sqldatareader("usroescv").tostring Label25.Text = sqldatareader("usrocrfm").tostring Label26.Text = sqldatareader("usromail").tostring DPRTCDGO = sqldatareader("dprtcdgo").tostring CRGOCDGO = sqldatareader("crgocdgo").tostring End If sqldatareader.close() 274

275 sqlcommand = New SqlCommand("select DPRTNMBR from DPRT where DPRTCDGO=@DPRTCDGO", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@DPRTCDGO", DPRTCDGO)) sqldatareader = sqlcommand.executereader() sqldatareader.read() DPRTNMBR = sqldatareader("dprtnmbr").tostring sqldatareader.close() Label19.Text = DPRTNMBR sqlcommand = New SqlCommand("select CRGODSCR from CRGO where CRGOCDGO=@CRGOCDGO", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@CRGOCDGO", CRGOCDGO)) sqldatareader = sqlcommand.executereader() sqldatareader.read() CRGODSCR = sqldatareader("crgodscr").tostring sqldatareader.close() Label24.Text = CRGODSCR End Sub End Class 275

276 Interfaz de Historia Clínica Básico Código Fuente Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlClient.SqlParameter Partial Class Examen Inherits System.Web.UI.Page Private sqlconnection As SqlConnection Private sqldataadapter As SqlDataAdapter Private sqldatareader As SqlDataReader Private sqldatareaderaux As SqlDataReader Private sqlcommand As SqlCommand Private sqlcommandaux As SqlCommand Private PCNTCDGO As Integer Private USROCDLA As String Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then 276

277 If (Session("USROTYPE").Equals("Basico")) Then Else Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If USROCDLA = Session("USROCDLA") sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connectio n=yes") sqlcommand = New SqlCommand("select * from PCNT where USROCDLA=@USROCDLA", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@USROCDLA", USROCDLA)) sqlconnection.open() sqldatareader = sqlcommand.executereader() sqldatareader.read() If sqldatareader.hasrows = True Then PCNTCDGO = sqldatareader("pcntcdgo") sqldatareader.close() sqlcommandaux = New SqlCommand("select * from HSCL where PCNTCDGO=@PCNTCDGO", sqlconnection) sqlcommandaux.parameters.add(new SqlParameter("@PCNTCDGO", PCNTCDGO)) sqldatareaderaux = sqlcommandaux.executereader() sqldatareaderaux.read() If sqldatareaderaux.hasrows = True Then DropDownList1.Text = sqldatareaderaux("hsclantc").tostring TextBox1.Text = sqldatareaderaux("hscloten").tostring TextBox2.Text = sqldatareaderaux("hsclinmn").tostring TextBox3.Text = sqldatareaderaux("hsclenin").tostring DropDownList5.Text = sqldatareaderaux("hsclhspt").tostring DropDownList6.Text = sqldatareaderaux("hsclembr").tostring DropDownList7.Text = sqldatareaderaux("hsclprts").tostring DropDownList8.Text = sqldatareaderaux("hsclabrt").tostring TextBox4.Text = sqldatareaderaux("hsclactr").tostring DropDownList2.Text = sqldatareaderaux("hsclhbts").tostring TextBox5.Text = sqldatareaderaux("hsclanfm").tostring TextBox6.Text = sqldatareaderaux("hsclanmn").tostring DropDownList3.Text = sqldatareaderaux("hsclcnst").tostring DropDownList4.Text = sqldatareaderaux("hsclntrc").tostring TextBox7.Text = 277

278 sqldatareaderaux("hsclestt").tostring TextBox8.Text = sqldatareaderaux("hsclpeso").tostring TextBox9.Text = sqldatareaderaux("hscltmbc").tostring TextBox10.Text = sqldatareaderaux("hsclplso").tostring TextBox11.Text = sqldatareaderaux("hsclsstl").tostring TextBox12.Text = sqldatareaderaux("hscldstl").tostring TextBox13.Text = sqldatareaderaux("hsclmdia").tostring TextBox14.Text = sqldatareaderaux("hsclplmc").tostring TextBox15.Text = sqldatareaderaux("hsclcbza").tostring TextBox16.Text = sqldatareaderaux("hsclcllo").tostring TextBox17.Text = sqldatareaderaux("hsclgrgn").tostring TextBox18.Text = sqldatareaderaux("hsclojos").tostring TextBox19.Text = sqldatareaderaux("hsclodos").tostring TextBox20.Text = sqldatareaderaux("hsclnriz").tostring TextBox21.Text = sqldatareaderaux("hsclboca").tostring TextBox22.Text = sqldatareaderaux("hscldntd").tostring TextBox23.Text = sqldatareaderaux("hscltrax").tostring TextBox24.Text = sqldatareaderaux("hsclcrzn").tostring TextBox25.Text = sqldatareaderaux("hsclplmn").tostring TextBox26.Text = sqldatareaderaux("hsclmnos").tostring TextBox27.Text = sqldatareaderaux("hsclabdm").tostring TextBox28.Text = sqldatareaderaux("hsclmspl").tostring TextBox29.Text = sqldatareaderaux("hsclsngr").tostring TextBox30.Text = sqldatareaderaux("hsclvdrl").tostring TextBox31.Text = sqldatareaderaux("hsclglsm").tostring TextBox32.Text = sqldatareaderaux("hsclorna").tostring TextBox33.Text = sqldatareaderaux("hsclcprp").tostring TextBox34.Text = sqldatareaderaux("hsclftfl").tostring TextBox35.Text = sqldatareaderaux("hsclrdlg").tostring 278

279 TextBox36.Text = sqldatareaderaux("hsclessl").tostring sqldatareaderaux.close() Else End If Else End If sqlconnection.close() End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub End Class Interfaz de Citas Básico Código Fuente Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlClient.SqlParameter Imports System.Net.Mail 279

280 Imports System.Net Imports System.Text Partial Class _Default Inherits System.Web.UI.Page Private sqlconnection As SqlConnection Private sqldataadapter As SqlDataAdapter Private sqldatareader As SqlDataReader Private sqlcommand As SqlCommand Private As New MailMessage Private smtpclient As SmtpClient Private CITACDGO As String Private USROCDLA As String Private USRONAMES As String Private USROMAIL As String Private CITAFCHA As String Private HORACDGO As String Private HORADSCR As String Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Basico")) Then Else Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If Calendar1.SelectedDate = Calendar1.TodaysDate End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click USROCDLA = Session("USROCDLA").ToString USROMAIL = Session("USROMAIL").ToString HORADSCR = DropDownList2.SelectedItem.ToString sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connectio n=yes") sqlcommand = New SqlCommand("select * from HORA where HORADSCR=@HORADSCR", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@HORADSCR", HORADSCR)) sqlconnection.open() sqldatareader = sqlcommand.executereader sqldatareader.read() HORACDGO = sqldatareader("horacdgo").tostring sqldatareader.close() sqlcommand.connection.close() CITAFCHA = Calendar1.SelectedDate.ToShortDateString sqlcommand = New SqlCommand("select * from CITA where CITAFCHA=@CITAFCHA and HORACDGO=@HORACDGO", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@CITAFCHA", 280

281 CITAFCHA)) sqlcommand.parameters.add(new HORACDGO)) sqlconnection.open() sqldatareader = sqlcommand.executereader If sqldatareader.hasrows = True Then HiddenField1.Value = "True" Else HiddenField1.Value = "False" End If sqldatareader.close() sqlcommand.connection.close() If HiddenField1.Value.Equals("False") Then sqlcommand = New SqlCommand("insert into CITA(USROCDLA,HORACDGO,CITAMTVO,CITAPRRD,CITAFCHA)values(@USROCD LA,@HORACDGO,@CITAMTVO,@CITAPRRD,@CITAFCHA)", sqlconnection) sqlcommand.parameters.add(new SqlParameter("@USROCDLA", USROCDLA)) sqlcommand.parameters.add(new SqlParameter("@CITAMTVO", TextBox1.Text)) sqlcommand.parameters.add(new SqlParameter("@CITAPRRD", DropDownList1.SelectedValue)) sqlcommand.parameters.add(new SqlParameter("@CITAFCHA", Calendar1.SelectedDate.ToShortDateString.ToString)) sqlcommand.parameters.add(new SqlParameter("@HORACDGO", HORACDGO)) sqlconnection.open() sqlcommand.executenonquery() sqlcommand.connection.close() TextBox1.Text = "" .from = New MailAddress("mednet@cosena.gov.ec", "PENTIUM", Encoding.UTF8) .to.add(usromail) .subject = "Cita Médica" .subjectencoding = Encoding.UTF8 .body = "Fecha de la cita:" + Calendar1.SelectedDate.ToShortDateString.ToString + vbcrlf + "Motivo:" + TextBox1.Text + vbcrlf + "Paciente:" + USRONAMES .bodyencoding = Encoding.UTF8 .isbodyhtml = True .priority = MailPriority.Normal smtpclient = New SmtpClient() 'ip smtpclient.host = " " smtpclient.credentials = New NetworkCredential("consultorio", "cosena,081080") smtpclient.send( ) MsgBox("Su cita se proceso con éxito/nsu cita se confirmará mediante ", MsgBoxStyle.Information, "Confirmación de Cita") Else MsgBox("Ya existe una cita en esa fecha y hora") End If End Sub End Class 281

282 Interfaz Historial Citas Básico Código Fuente Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlClient.SqlParameter Partial Class Historial Inherits System.Web.UI.Page Private sqlconnection As SqlConnection Private SqlCommand As SqlCommand Private sqldatareader As SqlDataReader Private USROCDLA As String Private FCHAINCL As String Private FCHAFNAL As String Private CITAFCHA As String Private CITACDGO As String Private CITACNFR As String Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Basico")) Then Else Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If USROCDLA = Session("USROCDLA") CITACNFR = "False" If HiddenField1.Value.Equals("False") = True Then If RadioButton1.Checked = True Then CITAFCHA = Calendar1.TodaysDate.ToShortDateString sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection =yes") SqlCommand = New SqlCommand("select CITACDGO,CITAMTVO,CITAPRRD,CITAFCHA from CITA where 282

283 and sqlconnection) SqlCommand.Parameters.Add(New USROCDLA)) SqlCommand.Parameters.Add(New CITAFCHA)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() Else FCHAINCL = TextBox1.Text FCHAFNAL = TextBox2.Text sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection =yes") SqlCommand = New SqlCommand("select CITACDGO,CITAMTVO,CITAPRRD,CITAFCHA from CITA where USROCDLA=@USROCDLA and CITAFCHA sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@USROCDLA", USROCDLA)) SqlCommand.Parameters.Add(New SqlParameter("@FCHAINCL", FCHAINCL)) SqlCommand.Parameters.Add(New SqlParameter("@FCHAFNAL", FCHAFNAL)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() End If HiddenField1.Value = "True" End If End Sub Protected Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection =yes") CITACDGO = GridView1.Rows(e.RowIndex).Cells(1).Text SqlCommand = New SqlCommand("delete from CITA where CITACDGO=@CITACDGO and CITACNFR=@CITACNFR", sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@CITACDGO", CITACDGO)) SqlCommand.Parameters.Add(New SqlParameter("@CITACNFR", CITACNFR)) SqlCommand.Connection.Open() SqlCommand.ExecuteNonQuery() SqlCommand.Connection.Close() FCHAINCL = TextBox1.Text FCHAFNAL = TextBox2.Text 283

284 sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection =yes") SqlCommand = New SqlCommand("select CITACDGO,CITAMTVO,CITAPRRD,CITAFCHA from CITA where USROCDLA=@USROCDLA and CITAFCHA sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@USROCDLA", USROCDLA)) SqlCommand.Parameters.Add(New SqlParameter("@FCHAINCL", FCHAINCL)) SqlCommand.Parameters.Add(New SqlParameter("@FCHAFNAL", FCHAFNAL)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() End Sub Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged End Sub Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection =yes") SqlCommand = New SqlCommand("select CITACDGO,CITAMTVO,CITAPRRD,CITAFCHA from CITA where USROCDLA=@USROCDLA", sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@USROCDLA", USROCDLA)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() End Sub Protected Sub RadioButton1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged TextBox1.Text = "" TextBox2.Text = "" TextBox1.Enabled = False TextBox2.Enabled = False Label1.Enabled = False Label2.Enabled = False Button2.Enabled = False CITAFCHA = Calendar1.TodaysDate.ToShortDateString sqlconnection = New 284

285 SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection =yes") SqlCommand = New SqlCommand("select CITACDGO,CITAMTVO,CITAPRRD,CITAFCHA from CITA where USROCDLA=@USROCDLA and CITAFCHA=@CITAFCHA", sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@USROCDLA", USROCDLA)) SqlCommand.Parameters.Add(New SqlParameter("@CITAFCHA", CITAFCHA)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() End Sub Protected Sub RadioButton2_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged TextBox1.Enabled = True TextBox2.Enabled = True Label1.Enabled = True Label2.Enabled = True Button2.Enabled = True End Sub Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click FCHAINCL = TextBox1.Text FCHAFNAL = TextBox2.Text sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection =yes") SqlCommand = New SqlCommand("select CITACDGO,CITAMTVO,CITAPRRD,CITAFCHA from CITA where USROCDLA=@USROCDLA and CITAFCHA sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@USROCDLA", USROCDLA)) SqlCommand.Parameters.Add(New SqlParameter("@FCHAINCL", FCHAINCL)) SqlCommand.Parameters.Add(New SqlParameter("@FCHAFNAL", FCHAFNAL)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() End Sub End Class 285

286 Interfaz Detalle de Informes Médicos Código fuente Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlClient.SqlParameter Partial Class Informe Inherits System.Web.UI.Page Private sqlconnection As SqlConnection Private SqlCommand As SqlCommand Private sqldatareader As SqlDataReader Private USROCDLA As String Private PCNTCDGO As Integer Private FCHAINCL As String Private FCHAFNAL As String Private INFRFCHA As String Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session.Count <> 0 Then If (Session("USROTYPE").Equals("Basico")) Then Else Page.Response.Redirect("Permission.aspx") End If Else Page.Response.Redirect("ExpiringSession.aspx") End If If HiddenField1.Value.Equals("False") Then USROCDLA = Session("USROCDLA") INFRFCHA = Date.Today.ToShortDateString sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection= yes") SqlCommand = New SqlCommand("select PCNTCDGO,USROCDLA from PCNT where USROCDLA=@USROCDLA", sqlconnection) SqlCommand.Parameters.Add(New 286

287 USROCDLA)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader sqldatareader.read() PCNTCDGO = sqldatareader("pcntcdgo") sqldatareader.close() sqlconnection.close() sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection= yes") SqlCommand = New SqlCommand("select INFRFCHA,INFRDTLL from INFR where PCNTCDGO=@PCNTCDGO and INFRFCHA=@INFRFCHA", sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@PCNTCDGO", PCNTCDGO)) SqlCommand.Parameters.Add(New SqlParameter("@INFRFCHA", INFRFCHA)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() HiddenField1.Value = "True" End If End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub Protected Sub RadioButton2_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged Label1.Enabled = True Label2.Enabled = True TextBox1.Enabled = True TextBox2.Enabled = True Button2.Enabled = True End Sub Protected Sub RadioButton1_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged Label1.Enabled = False Label2.Enabled = False TextBox1.Enabled = False TextBox2.Enabled = False Button2.Enabled = False INFRFCHA = Date.Today.ToShortDateString PCNTCDGO = Session("PCNTCDGO") sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection= yes") SqlCommand = New SqlCommand("select INFRFCHA,INFRDTLL from INFR where PCNTCDGO=@PCNTCDGO and INFRFCHA=@INFRFCHA", sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@PCNTCDGO", PCNTCDGO)) 287

288 SqlCommand.Parameters.Add(New INFRFCHA)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() End Sub Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click FCHAINCL = TextBox1.Text FCHAFNAL = TextBox2.Text PCNTCDGO = Session("PCNTCDGO") sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection= yes") SqlCommand = New SqlCommand("select INFRFCHA,INFRDTLL,INFRFCHA from INFR where PCNTCDGO=@PCNTCDGO and INFRFCHA sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@PCNTCDGO", PCNTCDGO)) SqlCommand.Parameters.Add(New SqlParameter("@FCHAINCL", FCHAINCL)) SqlCommand.Parameters.Add(New SqlParameter("@FCHAFNAL", FCHAFNAL)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() End Sub Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click PCNTCDGO = Session("PCNTCDGO") sqlconnection = New SqlConnection("server=PENTIUM;database=CLINICA;Trusted_Connection= yes") SqlCommand = New SqlCommand("select INFRFCHA,INFRDTLL,INFRFCHA from INFR where PCNTCDGO=@PCNTCDGO", sqlconnection) SqlCommand.Parameters.Add(New SqlParameter("@PCNTCDGO", PCNTCDGO)) sqlconnection.open() sqldatareader = SqlCommand.ExecuteReader GridView1.DataSource = sqldatareader GridView1.DataBind() sqldatareader.close() sqlconnection.close() End Sub Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged End Sub End Class 288

289 Validador de Cédula de Identidad Real Cuando el usuario ingresa una Cédula que no es real el sistema desplegará mensajes de error advirtiendo que la cedula no es válida. El sistema tiene implementado una función que permite realizar la validación de las cédulas de identidad. Imports System.Data Imports System.Data.SqlClient Imports System.Data.SqlClient.SqlParameter Partial Class Login Inherits System.Web.UI.Page Private sqlconnection As SqlConnection Private SqlCommand As SqlCommand Private sqldatareader As SqlDataReader Private USROPSSW As String Private USROCNTR As String Private USRONAMES As String Private USROTYPE As String Private USROMAIL As String Private PCNTCDGO As String Private USROCDLA As String Private idnumber As String Private provinces As Integer = 22 Private mdle As Integer = 10 Private remainder As Integer 289

Visual Studio 2008 es el conjunto de herramientas de

Visual Studio 2008 es el conjunto de herramientas de 1. VISUAL STUDIO 2008 Visual Studio 2008 es el conjunto de herramientas de desarrollo y programación creado por Microsoft tanto para aplicaciones Windows como aplicaciones web. La aparición de Visual Studio

Más detalles

CORPORACIÓN MEXICANA DE INVESTIGACIÓN EN MATERIALES, S.A. DE CV

CORPORACIÓN MEXICANA DE INVESTIGACIÓN EN MATERIALES, S.A. DE CV Página 1 de 6 1. OBJETIVO El presente documento tiene la finalidad de citar los beneficios de la migración de la herramienta de análisis de riesgo, mantenimiento e inspección que en lo sucesivo se denominará

Más detalles

TEMA: DESARROLLO DE APLICACIONES WEB INTERACTIVAS UTILIZANDO LA TÉCNICA AJAX AUTOR: MERY SUSANA ZAMBONINO BAUTISTA

TEMA: DESARROLLO DE APLICACIONES WEB INTERACTIVAS UTILIZANDO LA TÉCNICA AJAX AUTOR: MERY SUSANA ZAMBONINO BAUTISTA TEMA: DESARROLLO DE APLICACIONES WEB INTERACTIVAS UTILIZANDO LA TÉCNICA AJAX AUTOR: MERY SUSANA ZAMBONINO BAUTISTA AREA DEL TEMA: INGENIERÍA DE SOFTWARE OBJETIVO GENERAL Desarrollar aplicaciones web utilizando

Más detalles

Capítulo I. Definición del problema y objetivos de la tesis. En la actualidad Internet se ha convertido en una herramienta necesaria para todas

Capítulo I. Definición del problema y objetivos de la tesis. En la actualidad Internet se ha convertido en una herramienta necesaria para todas Capítulo I Definición del problema y objetivos de la tesis 1.1 Introducción En la actualidad Internet se ha convertido en una herramienta necesaria para todas las personas ya que nos permite realizar diferentes

Más detalles

CONCLUISIONES Y RECOMENDACIONES

CONCLUISIONES Y RECOMENDACIONES CONCLUISIONES Y RECOMENDACIONES CONTENIDO 7.1 Verificación de Hipótesis 7.2 Conclusiones 7.3 Recomendaciones Mónica Cecilia Gallegos Varela - 145 - VERIFICACIÓN DE HIPÓTESIS La hipótesis planteada al inicio

Más detalles

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Documento de trabajo elaborado para la Red Temática DocenWeb: Red Temática de Docencia en Control mediante Web (DPI2002-11505-E)

Más detalles

MANUAL DE USUARIO APLICACIÓN SYSACTIVOS

MANUAL DE USUARIO APLICACIÓN SYSACTIVOS MANUAL DE USUARIO APLICACIÓN SYSACTIVOS Autor Edwar Orlando Amaya Diaz Analista de Desarrollo y Soporte Produce Sistemas y Soluciones Integradas S.A.S Versión 1.0 Fecha de Publicación 19 Diciembre 2014

Más detalles

Introducción a Google Calendar Breve guía sobre algunas de sus funcionalidades destacables.

Introducción a Google Calendar Breve guía sobre algunas de sus funcionalidades destacables. Introducción a Google Calendar Breve guía sobre algunas de sus funcionalidades destacables. 28/03/2011 Centro de Servicios de Informática y Redes de Comunicaciones Nodo Cartuja Contenido 1. Introducción...

Más detalles

INTRANET DE UNA EMPRESA RESUMEN DEL PROYECTO. PALABRAS CLAVE: Aplicación cliente-servidor, Intranet, Área reservada, Red INTRODUCCIÓN

INTRANET DE UNA EMPRESA RESUMEN DEL PROYECTO. PALABRAS CLAVE: Aplicación cliente-servidor, Intranet, Área reservada, Red INTRODUCCIÓN INTRANET DE UNA EMPRESA Autor: Burgos González, Sergio. Director: Zaforas de Cabo, Juan. Entidad colaboradora: Colegio de Ingenieros del ICAI. RESUMEN DEL PROYECTO El proyecto consiste en el desarrollo

Más detalles

Modulo I. Introducción a la Programación Web. 1.1 Servidor Web.

Modulo I. Introducción a la Programación Web. 1.1 Servidor Web. Modulo I. Introducción a la Programación Web. 1.1 Servidor Web. Antes de analizar lo que es un servidor Web y llevara a cabo su instalación, es muy importante identificar diferentes elementos involucrados

Más detalles

INTRODUCCIÓN A LA PROGRAMACIÓN WEB UNIDAD. Estructura de contenidos: http://www.ucv.edu.pe/cis/ cisvirtual@ucv.edu.pe. 1.

INTRODUCCIÓN A LA PROGRAMACIÓN WEB UNIDAD. Estructura de contenidos: http://www.ucv.edu.pe/cis/ cisvirtual@ucv.edu.pe. 1. INTRODUCCIÓN A LA PROGRAMACIÓN WEB UNIDAD 1 Estructura de contenidos: 1. Programación Web 2. Sistema De Información 3. Sistema Web 4. Requisitos Para Sistemas Web Con Asp 5. Internet Information Server

Más detalles

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable 1. Introducción. El Sistema de Administración de Información de un Negocio Franquiciable (SAINF)

Más detalles

La utilización de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor.

La utilización de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor. Procesamiento del lado del servidor La Programación del lado del servidor es una tecnología que consiste en el procesamiento de una petición de un usuario mediante la interpretación de un script en el

Más detalles

Utilidades de la base de datos

Utilidades de la base de datos Utilidades de la base de datos Desde esta opcion del menú de Access, podemos realizar las siguientes operaciones: Convertir Base de datos Compactar y reparar base de datos Administrador de tablas vinculadas

Más detalles

Capítulo 5. Cliente-Servidor.

Capítulo 5. Cliente-Servidor. Capítulo 5. Cliente-Servidor. 5.1 Introducción En este capítulo hablaremos acerca de la arquitectura Cliente-Servidor, ya que para nuestra aplicación utilizamos ésta arquitectura al convertir en un servidor

Más detalles

Capítulo 2. Planteamiento del problema. Capítulo 2 Planteamiento del problema

Capítulo 2. Planteamiento del problema. Capítulo 2 Planteamiento del problema Capítulo2 Planteamientodelproblema 38 2.1Antecedentesycontextodelproyecto En lo que respecta a los antecedentes del proyecto, se describe inicialmente el contexto donde se utiliza el producto de software.

Más detalles

Elementos requeridos para crearlos (ejemplo: el compilador)

Elementos requeridos para crearlos (ejemplo: el compilador) Generalidades A lo largo del ciclo de vida del proceso de software, los productos de software evolucionan. Desde la concepción del producto y la captura de requisitos inicial hasta la puesta en producción

Más detalles

E-learning: E-learning:

E-learning: E-learning: E-learning: E-learning: capacitar capacitar a a su su equipo equipo con con menos menos tiempo tiempo y y 1 E-learning: capacitar a su equipo con menos tiempo y Si bien, no todas las empresas cuentan con

Más detalles

Introducción al.net Framework. Introducción al.net Framework. Diseño Basado en Componentes. Curso 2008 / 09. Diseño Basado en Componentes

Introducción al.net Framework. Introducción al.net Framework. Diseño Basado en Componentes. Curso 2008 / 09. Diseño Basado en Componentes Introducción al.net Framework Diseño Basado en Componentes Introducción al.net Framework Arquitectura.NET Herramientas, lenguajes y tecnologías.net.net Framework Ingeniería Informática Universidad Carlos

Más detalles

Capítulo VI. Estudio de Caso de Aplicación del Integrador de Información Desarrollado

Capítulo VI. Estudio de Caso de Aplicación del Integrador de Información Desarrollado Capítulo VI Estudio de Caso de Aplicación del Integrador de Información Desarrollado 6.1 Organización elegida La Organización elegida para el caso de aplicación, es la empresa CTM Tours del grupo Costamar,

Más detalles

Introducción a las redes de computadores

Introducción a las redes de computadores Introducción a las redes de computadores Contenido Descripción general 1 Beneficios de las redes 2 Papel de los equipos en una red 3 Tipos de redes 5 Sistemas operativos de red 7 Introducción a las redes

Más detalles

POSGRADO EXPERTO.NET DESARROLLO DE SOFTWARE

POSGRADO EXPERTO.NET DESARROLLO DE SOFTWARE POSGRADO EXPERTO.NET DESARROLLO DE SOFTWARE DESCRIPCIÓN Microsoft es una de las principales empresas dedicada al mundo de las tecnologías, haciendo grandes esfuerzos para ponerse a la cabeza de la actualidad

Más detalles

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos 2.1. Principios básicos del Modelado de Objetos UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos Hoy en día muchos de los procesos que intervienen en un negocio o empresa y que resuelven

Más detalles

Capítulo I. Marco Teórico

Capítulo I. Marco Teórico 1 Capítulo I. Marco Teórico 1. Justificación Hoy en día existe una gran diversidad de aplicaciones que corren sobre la World Wide Web (WWW o Web), y cada una orientada a un fin en particular, el cuál depende

Más detalles

ENTORNO DE DESARROLLO MICROSOFT.NET 2010

ENTORNO DE DESARROLLO MICROSOFT.NET 2010 ENTORNO DE DESARROLLO MICROSOFT.NET 2010 UNIDAD 2 Estructura de contenidos: 1. Conociendo ASP 2. Sitio Web y Proyecto Web 3. WebForm 4. Características de los webforms 5. Entorno del.net 6. Controles básicos

Más detalles

Ventajas del software del SIGOB para las instituciones

Ventajas del software del SIGOB para las instituciones Ventajas del software del SIGOB para las instituciones Podemos afirmar que además de la metodología y los enfoques de trabajo que provee el proyecto, el software, eenn ssi i mi issmoo, resulta un gran

Más detalles

WINDOWS 2008 5: TERMINAL SERVER

WINDOWS 2008 5: TERMINAL SERVER WINDOWS 2008 5: TERMINAL SERVER 1.- INTRODUCCION: Terminal Server proporciona una interfaz de usuario gráfica de Windows a equipos remotos a través de conexiones en una red local o a través de Internet.

Más detalles

Bechtle Solutions Servicios Profesionales

Bechtle Solutions Servicios Profesionales Soluciones Tecnología Bechtle Solutions Servicios Profesionales Fin del servicio de soporte técnico de Windows Server 2003 No hacer nada puede ser un riesgo BECHTLE Su especialista en informática Ahora

Más detalles

ACCESO AL SERVIDOR EXCHANGE MEDIANTE OWA

ACCESO AL SERVIDOR EXCHANGE MEDIANTE OWA ACCESO AL SERVIDOR EXCHANGE MEDIANTE OWA El Acceso al correo a través de OWA (Outlook Web Access) es una herramienta que permite a los usuarios consultar sus mensajes en una interfaz Web a través de un

Más detalles

Nos encargamos del tuyo, tú disfruta

Nos encargamos del tuyo, tú disfruta EN ACTIVE SABEMOS QUE TIENES COSAS MÁS IMPORTANTES QUE EL TRABAJO, POR ESO Nos encargamos del tuyo, tú disfruta 2015 ACTIVE BUSINESS & TECHNOLOGY. TODOS LOS DERECHOS RESERVADOS. 1 Esta nueva versión ha

Más detalles

FUNDAMENTOS DE PROGRAMACION CON C#

FUNDAMENTOS DE PROGRAMACION CON C# Capítulo 1 FUNDAMENTOS DE PROGRAMACION CON C# El lenguaje C# C# (léase, en inglés C sharp, y en español C almohadilla) es un lenguaje de programación que permite el desarrollo de aplicaciones para Internet,

Más detalles

Qué necesito saber para tener mi sitio web en Internet?

Qué necesito saber para tener mi sitio web en Internet? Qué necesito saber para tener mi sitio web en Internet? Introducción Antes es importante tener en cuenta que Es importante considerar lo siguiente: Definir claramente tu actividad en Internet Establecer

Más detalles

Estándares para el Uso de Herramientas de Desarrollo y Plataformas de Aplicaciones Web

Estándares para el Uso de Herramientas de Desarrollo y Plataformas de Aplicaciones Web Secretaría de Planificación Estratégica Oficina de Informática Estándares para el Uso de Herramientas de Desarrollo y Plataformas de Aplicaciones Web VERSIÓN 4 Julio 2009 Índice 1. Generalidades... 3 1.1

Más detalles

Visión General de GXportal. Última actualización: 2009

Visión General de GXportal. Última actualización: 2009 Última actualización: 2009 Copyright Artech Consultores S. R. L. 1988-2009. Todos los derechos reservados. Este documento no puede ser reproducido en cualquier medio sin el consentimiento explícito de

Más detalles

TeCS. Sistema de ayuda a la gestión del desarrollo de producto cerámico

TeCS. Sistema de ayuda a la gestión del desarrollo de producto cerámico TeCS Sistema de ayuda a la gestión del desarrollo de producto cerámico En el origen de todo proyecto de éxito se halla la capacidad de encauzar y estructurar la creatividad TeCS ofrece un entorno de fácil

Más detalles

Caso de Éxito. Lladó Grup Consultor. www.sagedespachosprofesionales.com despachosprofesionales@sage.es 902 01 34 49

Caso de Éxito. Lladó Grup Consultor. www.sagedespachosprofesionales.com despachosprofesionales@sage.es 902 01 34 49 Caso de Éxito www.sagedespachosprofesionales.com despachosprofesionales@sage.es 902 01 34 49 Caso de Éxito Sage puede aportarnos la tecnología indispensable para nuestro crecimiento y consolidación. Joan

Más detalles

Capítulo 4 Pruebas e implementación de la aplicación CAPÍTULO 4 PRUEBAS E IMPLEMENTACIÓN DE LA APLICACIÓN

Capítulo 4 Pruebas e implementación de la aplicación CAPÍTULO 4 PRUEBAS E IMPLEMENTACIÓN DE LA APLICACIÓN CAPÍTULO 4 PRUEBAS E IMPLEMENTACIÓN DE LA APLICACIÓN CONCEPTOS DE PRUEBAS DE APLICACIÓN El departamento de Testing se encarga de diseñar, planear y aplicar el rol de pruebas a los sistemas que el PROVEEDOR

Más detalles

Capítulo VI. Conclusiones. En este capítulo abordaremos la comparación de las características principales y

Capítulo VI. Conclusiones. En este capítulo abordaremos la comparación de las características principales y Capítulo VI Conclusiones En este capítulo abordaremos la comparación de las características principales y de las ventajas cada tecnología Web nos ofrece para el desarrollo de ciertas aplicaciones. También

Más detalles

CONSTRUCCIÓN DE PORTALES

CONSTRUCCIÓN DE PORTALES Curso «Los portales de internet». Fac. Documentación. Universidad de Murcia. 29 CONSTRUCCIÓN DE PORTALES Juan Antonio Pastor Sánchez 1. Introducción La Gestión de los contenidos informativos de los portales

Más detalles

Resumen de la solución SAP SAP Technology SAP Afaria. Gestión de la movilidad empresarial para mayor ventaja competitiva

Resumen de la solución SAP SAP Technology SAP Afaria. Gestión de la movilidad empresarial para mayor ventaja competitiva de la solución SAP SAP Technology SAP Afaria Gestión de la movilidad empresarial para mayor ventaja competitiva Simplificar la gestión de dispositivos y aplicaciones Simplificar la gestión de dispositivos

Más detalles

LLEVE SU NEGOCIO al SIGUIENTE NIVEL. digitalice todos sus documentos y procesos.

LLEVE SU NEGOCIO al SIGUIENTE NIVEL. digitalice todos sus documentos y procesos. LLEVE SU NEGOCIO al SIGUIENTE NIVEL. digitalice todos sus documentos y procesos. Qué es mydocument enterprise? MyDOCument Enterprise es una solución de gestión documental diseñada para que las empresas

Más detalles

Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere.

Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere. UNIVERSIDAD DE CARABOBO FACULTAD DE CIENCIA Y TECNOLOGÍA DIRECCION DE EXTENSION COORDINACION DE PASANTIAS Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere. Pasante:

Más detalles

CAPÍTULO 3 VISUAL BASIC

CAPÍTULO 3 VISUAL BASIC CAPÍTULO 3 VISUAL BASIC 3.1 Visual Basic Microsoft Visual Basic es la actual y mejor representación del viejo lenguaje BASIC, le proporciona un sistema completo para el desarrollo de aplicaciones para

Más detalles

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas:

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas: SISTEMAS DISTRIBUIDOS DE REDES 1. SISTEMAS DISTRIBUIDOS Introducción y generalidades La computación desde sus inicios ha sufrido muchos cambios, desde los grandes equipos que permitían realizar tareas

Más detalles

La toma de decisiones está presente dentro de la vida de la mayoría de las personas. Los

La toma de decisiones está presente dentro de la vida de la mayoría de las personas. Los ANEXO II. Sistema de Soporte a las Decisiones-SSD La toma de decisiones está presente dentro de la vida de la mayoría de las personas. Los gerentes día a día deben tomar decisiones también, la diferencia

Más detalles

1 GLOSARIO. Actor: Es un consumidor (usa) del servicio (persona, sistema o servicio).

1 GLOSARIO. Actor: Es un consumidor (usa) del servicio (persona, sistema o servicio). 1 GLOSARIO A continuación se definen, en orden alfabético, los conceptos básicos que se han abordado a lo largo del desarrollo de la metodología para la gestión de requisitos bajo la Arquitectura Orientada

Más detalles

JAVA EE 5. Arquitectura, conceptos y ejemplos.

JAVA EE 5. Arquitectura, conceptos y ejemplos. JAVA EE 5. Arquitectura, conceptos y ejemplos. INTRODUCCIÓN. MODELO DE LA APLICACIÓN JEE5. El modelo de aplicación Java EE define una arquitectura para implementar servicios como lo hacen las aplicaciones

Más detalles

NBG Asesores Abogados

NBG Asesores Abogados Caso de Éxito www.sagedespachosprofesionales.com despachosprofesionales@sage.es 902 01 34 49 Caso de Éxito Las actualizaciones periódicas de Sage Profesional Class a nuevas normativas nos permiten atender

Más detalles

UNIVERSIDAD DE SALAMANCA

UNIVERSIDAD DE SALAMANCA UNIVERSIDAD DE SALAMANCA FACULTAD DE CIENCIAS INGENIERÍA TÉCNICA EN INFORMÁTICA DE SISTEMAS Resumen del trabajo práctico realizado para la superación de la asignatura Proyecto Fin de Carrera. TÍTULO SISTEMA

Más detalles

Unidad III. Software para la administración de proyectos.

Unidad III. Software para la administración de proyectos. Unidad III Software para la administración de proyectos. 3.1 Herramientas de software para administrar proyectos. El software de administración de proyectos es un concepto que describe varios tipos de

Más detalles

Cómo elegir tu SOFTWARE DE GESTIÓN?

Cómo elegir tu SOFTWARE DE GESTIÓN? Cómo elegir tu SOFTWARE DE GESTIÓN? 00 Introducción Tu empresa está en expansión y has decidido integrar todas las áreas de tu negocio para seguir creciendo. Has iniciado la búsqueda de un software de

Más detalles

App para realizar consultas al Sistema de Información Estadística de Castilla y León

App para realizar consultas al Sistema de Información Estadística de Castilla y León App para realizar consultas al Sistema de Información Estadística de Castilla y León Jesús M. Rodríguez Rodríguez rodrodje@jcyl.es Dirección General de Presupuestos y Estadística Consejería de Hacienda

Más detalles

Capitulo 5. Implementación del sistema MDM

Capitulo 5. Implementación del sistema MDM Capitulo 5. Implementación del sistema MDM Una vez que se concluyeron las actividades de análisis y diseño se comenzó la implementación del sistema MDM (Manejador de Documentos de MoProSoft). En este capitulo

Más detalles

"Diseño, construcción e implementación de modelos matemáticos para el control automatizado de inventarios

Diseño, construcción e implementación de modelos matemáticos para el control automatizado de inventarios "Diseño, construcción e implementación de modelos matemáticos para el control automatizado de inventarios Miguel Alfonso Flores Sánchez 1, Fernando Sandoya Sanchez 2 Resumen En el presente artículo se

Más detalles

I. OBJETIVOS INTRODUCCIÓN. Oscar Daniel Camuendo Vásquez e-mail: oscardny86@hotmail.com

I. OBJETIVOS INTRODUCCIÓN. Oscar Daniel Camuendo Vásquez e-mail: oscardny86@hotmail.com DISEÑO, IMPLEMENTACIÓN E IMPLANTACIÓN DE UNA APLICACIÓN WEB DE ADMINISTRACIÓN Y CONTROL DE CALIFICACIONES PARA LA UNIDAD EDUCATIVA PARTICULAR OVIEDO (SECCIÓN SECUNDARIA), UTILIZANDO SOFTWARE LIBRE. Oscar

Más detalles

Componentes de Integración entre Plataformas Información Detallada

Componentes de Integración entre Plataformas Información Detallada Componentes de Integración entre Plataformas Información Detallada Active Directory Integration Integración con el Directorio Activo Active Directory es el servicio de directorio para Windows 2000 Server.

Más detalles

Microsoft Dynamics. Instalación de Management Reporter for Microsoft Dynamics ERP

Microsoft Dynamics. Instalación de Management Reporter for Microsoft Dynamics ERP Microsoft Dynamics Instalación de Management Reporter for Microsoft Dynamics ERP Fecha: mayo de 2010 Tabla de contenido Introducción... 3 Información general... 3 Requisitos del sistema... 3 Instalación

Más detalles

Mi propuesta consiste en crear un portal Web que contemple las siguientes funcionalidades:

Mi propuesta consiste en crear un portal Web que contemple las siguientes funcionalidades: Propósito del prototipo: Mi propuesta consiste en crear un portal Web que contemple las siguientes funcionalidades: 1º. Mostrar noticias y eventos propios del grupo de personas que administren la Web.

Más detalles

Versión: 01. Fecha: 01/04/2013. Código: F004-P006-GFPI GUÍA DE APRENDIZAJE Nº 1 1. IDENTIFICACIÓN DE LA GUIA DE APRENDIZAJE

Versión: 01. Fecha: 01/04/2013. Código: F004-P006-GFPI GUÍA DE APRENDIZAJE Nº 1 1. IDENTIFICACIÓN DE LA GUIA DE APRENDIZAJE SERVICIO NACIONAL DE APRENDIZAJE SENA GUÍA DE APRENDIZAJE SISTEMA INTEGRADO DE GESTIÓN Proceso Gestión de la Formación Profesional Integral Procedimiento Ejecución de la Formación Profesional Integral

Más detalles

Información de Producto:

Información de Producto: Windows Server 2008 Foundation La nueva tecnología rentable de Windows Server 2008 Foundation La tecnología confiable y comprobada de Windows Server Foundation proporciona una base para ejecutar las aplicaciones

Más detalles

FAMILIA PROFESIONAL: Informática y Comunicación CICLO SUPERIOR DESARROLLO DE APLICACIONES MULTIMEDIA DAM 350 HORAS

FAMILIA PROFESIONAL: Informática y Comunicación CICLO SUPERIOR DESARROLLO DE APLICACIONES MULTIMEDIA DAM 350 HORAS FAMILIA PROFESIONAL: Informática y Comunicación CICLO SUPERIOR DESARROLLO DE APLICACIONES MULTIMEDIA DAM 350 HORAS Resultados de aprendizaje y criterios de evaluación 1. Identificar la estructura y organización

Más detalles

COMUNICACIONES TECNIMAP 2007 CENTRALIZACIÓN DEL SISTEMA DE INFORMACIÓN DE ATENCIÓN PRIMARIA: HISTORIA CLÍNICA ELECTRÓNICA INTEGRADA

COMUNICACIONES TECNIMAP 2007 CENTRALIZACIÓN DEL SISTEMA DE INFORMACIÓN DE ATENCIÓN PRIMARIA: HISTORIA CLÍNICA ELECTRÓNICA INTEGRADA CENTRALIZACIÓN DEL SISTEMA DE INFORMACIÓN DE ATENCIÓN PRIMARIA: HISTORIA CLÍNICA ELECTRÓNICA INTEGRADA En el marco de las tecnologías de la información aplicadas al ámbito sanitario, la Sanidad Madrileña

Más detalles

1. INTRODUCCIÓN Y OBJETIVOS

1. INTRODUCCIÓN Y OBJETIVOS 1. INTRODUCCIÓN Y OBJETIVOS Los teléfonos móviles son ya parte esencial en nuestra forma de vida y cada día son más los usuarios de estos terminales. Hasta ahora nos han acompañado a todas partes y nos

Más detalles

1.2 Alcance. 1.3 Definición del problema

1.2 Alcance. 1.3 Definición del problema 1. INTRODUCCIÓN El avance de Internet y las comunicaciones de los últimos años ha provocado un interés creciente por el desarrollo de propuestas metodológicas que ofrezcan un marco de referencia adecuado

Más detalles

Capítulo 1 Documentos HTML5

Capítulo 1 Documentos HTML5 Capítulo 1 Documentos HTML5 1.1 Componentes básicos HTML5 provee básicamente tres características: estructura, estilo y funcionalidad. Nunca fue declarado oficialmente pero, incluso cuando algunas APIs

Más detalles

Internet Information Server

Internet Information Server Internet Information Server Internet Information Server (IIS) es el servidor de páginas web avanzado de la plataforma Windows. Se distribuye gratuitamente junto con las versiones de Windows basadas en

Más detalles

CRM. Customer Relationship Management Sistema de Gestión Inteligente de Mercadeo y Ventas. Sistema de Gestión Inteligente de Mercadeo y Ventas

CRM. Customer Relationship Management Sistema de Gestión Inteligente de Mercadeo y Ventas. Sistema de Gestión Inteligente de Mercadeo y Ventas CRM Customer Relationship Management Sistema de Gestión Inteligente de Mercadeo y Ventas Sistema de Gestión Inteligente de Mercadeo y Ventas Customer Relationship Management (Administración de Relaciones

Más detalles

Ingeniería de Software

Ingeniería de Software Ingeniería de Software MSDN Ingeniería de Software...1 Ingeniería del Software_/_ Ingeniería y Programación...1 Análisis de Requerimientos...2 Especificación...3 Diseño...4 Desarrollo en Equipo...5 Mantenimiento...6

Más detalles

CAPITULO IV. HERRAMIENTAS DE CÓDIGO ABIERTO

CAPITULO IV. HERRAMIENTAS DE CÓDIGO ABIERTO CAPITULO IV. HERRAMIENTAS DE CÓDIGO ABIERTO En la actualidad la mayoría de las grandes empresas cuentan con un sin número de servicios que ofrecen a sus trabajadores y clientes. Muchos de estos servicios

Más detalles

PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE

PRUEBAS DE SOFTWARE TECNICAS DE PRUEBA DE SOFTWARE PRUEBAS DE SOFTWARE La prueba del software es un elemento crítico para la garantía de la calidad del software. El objetivo de la etapa de pruebas es garantizar la calidad del producto desarrollado. Además,

Más detalles

Manual de uso. Manual de uso - citanet 1

Manual de uso. Manual de uso - citanet 1 Manual de uso Manual de uso - citanet 1 1. Requisitos previos a la instalación... 3 2. Primer inicio de la aplicación.... 3 2.1. Pantalla de inicio de sesión.... 3 2.2. Datos de la empresa y configuración

Más detalles

Sistema de diseño y seguimiento de Procesos WT - WorkFlow.

Sistema de diseño y seguimiento de Procesos WT - WorkFlow. Sistema de diseño y seguimiento de Procesos WT - WorkFlow. Introducción El moderno y veloz ambiente empresarial demanda una gran agilidad en los procesos internos corporativos como clave para la competitividad.

Más detalles

ARQUITECTURA DE DISTRIBUCIÓN DE DATOS

ARQUITECTURA DE DISTRIBUCIÓN DE DATOS 4 ARQUITECTURA DE DISTRIBUCIÓN DE DATOS Contenido: Arquitectura de Distribución de Datos 4.1. Transparencia 4.1.1 Transparencia de Localización 4.1.2 Transparencia de Fragmentación 4.1.3 Transparencia

Más detalles

Novedades en Q-flow 3.02

Novedades en Q-flow 3.02 Novedades en Q-flow 3.02 Introducción Uno de los objetivos principales de Q-flow 3.02 es adecuarse a las necesidades de grandes organizaciones. Por eso Q-flow 3.02 tiene una versión Enterprise que incluye

Más detalles

SUPLEMENTO EUROPASS AL TÍTULO

SUPLEMENTO EUROPASS AL TÍTULO SUPLEMENTO EUROPASS AL TÍTULO DENOMINACIÓN DEL TÍTULO Técnico Superior en Desarrollo de Aplicaciones Web --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Más detalles

MINING SOLUTIONS LIMITADA

MINING SOLUTIONS LIMITADA MINING SOLUTIONS LIMITADA Contenido... 1 Resumen Ejecutivo... 3... 4 Nuestros Servicios... 5 Administración de proyectos... 6 Operación y mantenimiento sobre los Sistema de Manejo de la Información Geológica

Más detalles

SUPLEMENTO EUROPASS AL TÍTULO

SUPLEMENTO EUROPASS AL TÍTULO SUPLEMENTO EUROPASS AL TÍTULO DENOMINACIÓN DEL TÍTULO Técnico Superior en Desarrollo de Aplicaciones Multiplataforma --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Más detalles

IDEA DE NEGOCIO EDUGER LOGISTIC GERMAN EDUARDO BALSERO MORALES PROFESOR: GERARDO ANDRES ARCOS CELIS

IDEA DE NEGOCIO EDUGER LOGISTIC GERMAN EDUARDO BALSERO MORALES PROFESOR: GERARDO ANDRES ARCOS CELIS IDEA DE NEGOCIO EDUGER LOGISTIC GERMAN EDUARDO BALSERO MORALES PROFESOR: GERARDO ANDRES ARCOS CELIS CORPORACIÓN UNIVERSITARIA IBEROAMERICANA TECNOLOGIA EN LOGISTICA INFORMATICA BOGOTA D.C. 2013 INTRODUCCIÓN

Más detalles

ADT CONSULTING S.L. http://www.adtconsulting.es PROYECTO DE DIFUSIÓN DE BUENAS PRÁCTICAS

ADT CONSULTING S.L. http://www.adtconsulting.es PROYECTO DE DIFUSIÓN DE BUENAS PRÁCTICAS ADT CONSULTING S.L. http://www.adtconsulting.es PROYECTO DE DIFUSIÓN DE BUENAS PRÁCTICAS ESTUDIO SOBRE EL POSICIONAMIENTO EN BUSCADORES DE PÁGINAS WEB Y LA RELEVANCIA DE LA ACTUALIZACIÓN DE CONTENIDOS

Más detalles

Arquitectura. 1.- Aplicaciones Web. Definición. Arquitectura clásica. Contenidos. 1.- Aplicaciones Web

Arquitectura. 1.- Aplicaciones Web. Definición. Arquitectura clásica. Contenidos. 1.- Aplicaciones Web Arquitectura 1.- Aplicaciones Web Definición Contenidos 1.- Aplicaciones Web 2.- Arquitectura de aplicaciones Web Lo que distingue una aplicación Web de una mero sitio Web reside en la posibilidad que

Más detalles

Primaria Digital. Índice

Primaria Digital. Índice ES TACI ÓN2 AULASVI RTUALESENEL SERVI DORDEPRI MARI ADI GI TAL Índice Introducción a las Aulas Virtuales...2 Por qué un Aula Virtual en el Servidor Pedagógico de Primaria Digital?...3 Ingresando a las

Más detalles

GLOSARIO. Arquitectura: Funcionamiento, estructura y diseño de una plataforma de desarrollo.

GLOSARIO. Arquitectura: Funcionamiento, estructura y diseño de una plataforma de desarrollo. GLOSARIO Actor: Un actor es un usuario del sistema. Esto incluye usuarios humanos y otros sistemas computacionales. Un actor usa un Caso de Uso para ejecutar una porción de trabajo de valor para el negocio.

Más detalles

La Digitalización del Ayuntamiento. Gestión Integral

La Digitalización del Ayuntamiento. Gestión Integral prosoft.es La Digitalización del Ayuntamiento. Gestión Integral Desarrollamos su proyecto para el Fondo de Inversión Local El Real Decreto-ley, que crea el Fondo de 5.000 millones de euros, fue aprobado

Más detalles

Instalación y mantenimiento de servicios de Internet. U.T.3.- Servicio DNS

Instalación y mantenimiento de servicios de Internet. U.T.3.- Servicio DNS Instalación y mantenimiento de servicios de Internet U.T.3.- Servicio DNS 1 Qué es el servicio DNS? A los usuarios de Internet les resulta complicado trabajar con direcciones IP, sobre todo porque son

Más detalles

Comunicación interna: Intranets

Comunicación interna: Intranets Comunicación interna: Intranets Intranets es un sistema privado de información y colaboración que utiliza estándares y programas de Internet. Podemos considerarla como una red interna diseñada para ser

Más detalles

Workflows? Sí, cuántos quiere?

Workflows? Sí, cuántos quiere? Workflows? Sí, cuántos quiere? 12.11.2006 Servicios Profesionales Danysoft Son notables los beneficios que una organización puede obtener gracias al soporte de procesos de negocios que requieran la intervención

Más detalles

Studium, Campus Virtual de la Universidad de Salamanca.

Studium, Campus Virtual de la Universidad de Salamanca. Studium, Campus Virtual de la Universidad de Salamanca. Contenidos 1 Qué es Studium 2 Instalación de Studium en USAL 3 Atención a los usuarios 4 Instalación Moodle. MoodleWindowsInstaller 5 Moodle portable

Más detalles

ADMINISTRACIÓN CENTRALIZADA DELL POWERVAULT DL2000 CON TECNOLOGÍA SYMANTEC

ADMINISTRACIÓN CENTRALIZADA DELL POWERVAULT DL2000 CON TECNOLOGÍA SYMANTEC ADMINISTRACIÓN CENTRALIZADA DELL POWERVAULT DL2000 CON TECNOLOGÍA SYMANTEC RESUMEN EJECUTIVO Es un método ideal para que cualquier departamento de TI logre realizar respaldos y restauraciones más rápidas

Más detalles

CAPÍTULO I. Sistemas de Control Distribuido (SCD).

CAPÍTULO I. Sistemas de Control Distribuido (SCD). 1.1 Sistemas de Control. Un sistema es un ente cuya función es la de recibir acciones externas llamadas variables de entrada que a su vez provocan una o varias reacciones como respuesta llamadas variables

Más detalles

BASES DE DATOS OFIMÁTICAS

BASES DE DATOS OFIMÁTICAS BASES DE DATOS OFIMÁTICAS Qué es una Bases de Datos Ofimática?. En el entorno de trabajo de cualquier tipo de oficina ha sido habitual tener un archivo con gran parte de la información necesaria para el

Más detalles

Soporte Técnico de Software HP

Soporte Técnico de Software HP Soporte Técnico de Software HP Servicios Tecnológicos HP Servicios contractuales Datos técnicos El Soporte Técnico de Software HP ofrece servicios integrales de soporte remoto de para los productos de

Más detalles

Servicios TIC. Propuesta educación Universidad

Servicios TIC. Propuesta educación Universidad Servicios TIC Propuesta educación Universidad 1. LMS - Campus Virtual Somos una empresa formada por un equipo especializado en la integración de las tecnologías de la información y la comunicación en entornos

Más detalles

MACROPROCESO GESTIÓN TECNOLÓGICA

MACROPROCESO GESTIÓN TECNOLÓGICA Versión 1.0 Página 1 de 5 1. OBJETIVO Suministrar las fases para la puesta en producción de aplicaciones y sistemas de información desarrollados o adquiridos por el Instituto Colombiano de Bienestar Familiar

Más detalles

1.1.- Introducción a la Web Vemos una introducción al medio donde se encajan los lenguajes que vamos a tratar: la web.

1.1.- Introducción a la Web Vemos una introducción al medio donde se encajan los lenguajes que vamos a tratar: la web. Sesión 01: Introducción a los lenguajes web COMPUTACION E INFORMATICA WEB DEVELOPPER III Competencias a Conseguir: - Introducción general a la programación web. - Conocer y diferenciar el concepto de páginas

Más detalles

Programación páginas web con ASP.NET 3.5 (C#)

Programación páginas web con ASP.NET 3.5 (C#) Horas de teoría: 40 Horas de práctica: 40 Programación páginas web con ASP.NET 3.5 (C#) Curso de desarrollo de aplicaciones web. Para ello se estudia la programación de la parte cliente con JavaScript

Más detalles

Objetivos y Competencias

Objetivos y Competencias Objetivos y Competencias 2.1 Objetivos del ciclo formativo a) Ajustar la configuración lógica del sistema analizando las necesidades y criterios establecidos para configurar y explotar sistemas informáticos.

Más detalles

computadoras que tienen este servicio instalado se pueden publicar páginas web tanto local como remotamente.

computadoras que tienen este servicio instalado se pueden publicar páginas web tanto local como remotamente. Investigar Qué es un IIS? Internet Information Services o IIS es un servidor web y un conjunto de servicios para el sistema operativo Microsoft Windows. Originalmente era parte del Option Pack para Windows

Más detalles

elastic PROJECTS INFORMACIÓN COMERCIAL PROJECTS

elastic PROJECTS INFORMACIÓN COMERCIAL PROJECTS PROJECTS elastic PROJECTS INFORMACIÓN COMERCIAL Inscripción Registro Mercantil de Pontevedra, Tomo 3116, Libro 3116, Folio 30, Hoja PO-38276 C.I.F.: B-36.499.960 contact@imatia.com 1 INTRODUCCIÓN Mediante

Más detalles

Anexo 4 Documento de Arquitectura

Anexo 4 Documento de Arquitectura Anexo 4 Documento de Arquitectura 1. Introducción El anexo se describe el propósito y alcance referentes al proyecto correspondiente al documento de arquitectura. 2. Propósito El propósito del anexo de

Más detalles

Presentación de Pyramid Data Warehouse

Presentación de Pyramid Data Warehouse Presentación de Pyramid Data Warehouse Pyramid Data Warehouse tiene hoy una larga historia, desde 1994 tiempo en el que su primera versión fue liberada, hasta la actual versión 8.00. El incontable tiempo

Más detalles