You are on page 1of 93

DISEO E IMPLEMENTACIN DE UN SISTEMA PARA EL ALMACENAMIENTO DE HISTORIAL CLNICO EN TARJETAS INTELIGENTES

FREDY MAURICIO SANABRIA HIGUERA RAFAEL ALFONSO ROMERO VARGAS

UNIVERSIDAD DE LOS ANDES FACULTAD DE INGENIERIA DEPARTAMENTO DE INGENIERIA ELECTRONICA BOGOTA 2005

IEL2-I-05-39 IEL2-I-05-41

DESARROLLO E IMPLEMENTACION DE UN SISTEMA PARA ALMACENAR HISTORIALES MDICOS EN TARJETAS INTELIGENTES

FREDY MAURICIO SANABRIA HIGUERA RAFAEL ALFONSO ROMERO VARGAS

Asesor: ANTONIO SALAZAR

UNIVERSIDAD DE LOS ANDES FACULTAD DE INGENIERIA DEPARTAMENTO DE INGENIERIA ELECTRONICA BOGOTA 2005

-4-

IEL2-I-05-39 IEL2-I-05-41

CONTENIDO

CAPITULO

Pg.

1. RESUMEN 2. INTRODUCCION 3. ESTADO DEL ARTE 4. OBJETIVOS 4.1 Objetivo General 4.2 Objetivos Especficos 5. DEFINICION DEL PROBLEMA 6. TARJETAS INTELIGENTES 6.1 Historia 6.2 Tipos de Tarjetas Inteligentes 6.3 Caractersticas Fsicas de las Tarjetas 7. ENCRIPTACION 7.1 Historia 7.2 Aspectos Legales 8. DESCRIPCION DEL SISTEMA 8.1 Especificaciones del Sistema 8.2 Seleccin de la Tarjeta Inteligente 8.3 Descripcin de la Tarjeta X24026 8.4 Historial Mdico

8 9 11 14 14 14 15 16 16 17 17 20 20 21 22 22 22 24 26

-5-

IEL2-I-05-39 IEL2-I-05-41

8.5 Dispositivo de Lectura y Escritura de la Tarjeta 8.5.1 Alimentacin de Energa 8.5.2 Conexin del Puerto Serial 8.5.3 Generador de Seal de Reloj 8.5.4 Lectura y Escritura de la Tarjeta 8.5.5 Interfaz con el Usuario 8.5.6 Consumo de Energa 8.5.7 Costo del dispositivo Lector - Escritor 8.6 Programa para la Interfase entre el Dispositivo Lector Escritor con el Computador e Internet. 8.6.1 Funciones del Programa. 8.6.2 Caractersticas del Programa. 8.6.3 Seguridad 8.6.4 Encriptacin. 8.6.5 Firma Electrnica 8.7 El Lector Porttil 8.7.1 Alimentacin y Seal de Reloj 8.7.2 Interfaz con el Usuario 8.7.3 Lectura de la Tarjeta 8.8 Circuitos Impresos 8.9 Sistema de Archivos 8.10 Pgina en Internet 9. RESULTADOS 10. CONCLUSIONES 11. PERSPECTIVAS REFERENCIAS ANEXOS

27 28 28 29 30 32 32 32 33 34 37 37 37 38 39 40 40 41 42 45 45 48 50 51 52 58

-6-

IEL2-I-05-39 IEL2-I-05-41

LISTA DE TABLAS

TABLA 1 2 3 4 5 6

DESCRIPCION Tipo de Datos a inclur en la Tarjeta Inteligente Comparacin de costos entre Microcontroladores similares Consumo de Energa de los Componentes Dispositivo Lector Escritor Costo del dispositivo Lector - Escritor Tabla de costos en el mercado de varios tipos de Pantallas Costo del dispositivo lector portatil

Pg. 26 30 32 33 40 43

-7-

IEL2-I-05-39 IEL2-I-05-41

LISTA DE FIGURAS

Figura 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Descripcin Dimensiones de una Tarjeta ID1 Numeracin y Funcin de los Conectores Distribucin de Pines en la Tarjeta X24026 Diagrama Funcional de la Tarjeta X24026 Protocolo para la escritura de un dato en una direccin arbitraria Diagrama Descriptivo del Dispositivo Lector Escritor Integrado ILC 8038 Diagrama para ge vnerar la Seal de Reloj Dispositivo Lector Escritor Sistema de Almacenamiento de Historial Clnico a travs de Tarjetas Inteligentes Visualizacin del Proceso de Autenticacin Visualizacin del Proceso confirmacin del Usuario Diagrama descriptivo del Dispositivo Lector Escritor Dispositivo Lector Porttil Dispositivo Lector Porttil ensamblado Tablas para hallar el ancho mnimo requerido en las pistas de un Circuito Impreso Circuito Impreso correspondiente al Dispositivo Lector Escritor Circuito Impreso del Dispositivo Lector Porttil Ingreso a la Zona Segura desde la Pgina HMC Pgina de acceso al Sistema de archivos restringidos que contiene la Historia Mdica Componentes del Sistema Ensamblado

Pg. 18 19 24 25 26 27 29 32 33 36 36 39 41 41 42 43 43 45 46 48

-8-

IEL2-I-05-39 IEL2-I-05-41

LISTA DE ANEXOS

Anexo 1 2 3

Contenido Programa del microcontrolador en el dispositivo lector escritor Programa del microcontrolador Atmel 89C51 en el dispositivo lector portatil Algoritmo utilizado para desarrollar el software: Sistema de almacenamiento de historial clnico a travs de tarjetas inteligentes

Pg. 54 62 69

-9-

IEL2-I-05-39 IEL2-I-05-41

1. RESUMEN

En este documento se presenta el desarrollo e implementacin de un sistema que permite almacenar los datos ms relevantes del historial clinico de las personas en tarjetas plsticas inteligentes, el cual incluye un dispositivo para la lectura y escritura por medio del computador, un lector porttil para emergencias y un sistema de archivos de respaldo en Internet donde se almacena la informacin en forma segura y permite la consultar remota de los historiales para utilizarlos en casos de emergencia y en medicina preventiva. Para el desarrollo del proyecto se siguieron las etapas que estn previstas en los mtodos de investigacin cientfica: Se plante el problema a investigar desarrollando tres elementos: Objetivos de investigacin, preguntas de investigacin y justificacin de sta. Los objetivos y las preguntas deben ser congruentes entre si e ir en la misma direccin para establecer qu pretende la investigacin. Las preguntas nos dicen qu respuestas debe encontrar la investigacin y la justificacin nos indica por qu debe hacerse la investigacin. Los criterios para medir el valor de una investigacin son: Conveniencia, relevancia social, implicaciones prcticas, valor terico y utilidad. Al finalizar el proyecto se implement un sistema que permite almacenar los historiales clnicos de manera eficiente, cumpliendo de esta manera con los objetivos propuestos y encontrando que el desarrollo de un sistema que abarca mltiples funciones, permite explotar al mximo las cualidades que poseen las Tarjetas Inteligentes. Tambien se descubrio que el desarrollo del dispositivo de lectura porttil expande el campo de accin del sistema y que el uso de la firma electrnica y encriptacin brinda un sistema confiable de seguridad.

- 10 -

IEL2-I-05-39 IEL2-I-05-41

2. INTRODUCCION

Hasta hace poco, las entidades de salud guardaban las historias clnicas de sus pacientes en grandes archivos cuyo acceso no era fcil ni oportuno. En los ltimos aos algunas instituciones han convertido esos archivos en documentos digitales, mejorando el tiempo de bsqueda, la exactitud y actualizacin, pero toda la informacin queda disponible para que la utilice un solo usuario, no la pueden consultar otras instituciones. Es por esto que a un paciente le elaboran una nueva historia clnica cada vez que es atendido en un sitio diferente al que asiste normalmente. En un accidente, si una persona queda inconsciente, no puede suministrar ningn dato importante sobre su salud, grupo sanguneo, alergias, tratamientos en curso, enfermedades, cirugas practicadas o cualquier procedimiento que se debe conocer cuando ingresa al centro de urgencias; en ese momento, sera fundamental tener a la mano el historial mdico del paciente ya que esto podra salvarle la vida. Tambien es importante suministrar informacin referente a la EPS (Empresa presatoda de salud) al que pertenece y de esta manera verificar la validez del afiliado para asi prestar un servicio mejor y ms rpido. Si se implementa este sistema ser una ayuda esencial para el personal mdico y hospitalario porque es una herramienta que suministra oportunamente la informacin bsica sobre la historia clnica de las personas, para que sea utilizada en cualquier sitio o circunstancia, tanto para casos de emergencia como en medicina preventiva o en intervenciones quirrgicas que se le deban realizar a un paciente. Para colaborar en la solucin del problema, en este proyecto se disear y construir un sistema conformado por los siguientes elementos: 1. Un dispositivo de almacenamiento digital que le permita a cada persona llevar consigo su historial mdico. 2. un sistema de archivos para almacenar en Internet la informacin de cada paciente, para que sirva de soporte en caso de perdida o dao - 11 -

IEL2-I-05-39 IEL2-I-05-41

de la informacin que porta la persona y para permitir a los mdicos consultar el historial de un paciente en forma remota. 3. Dos dispositivos: Uno que permite la lectura de la informacin a travs de un computador y otro que la lee de manera porttil. En nuestro proyecto utilizaremos tarjetas inteligentes las cuales son tarjetas plsticas que incorporan un chip que les permite almacenar datos de manera segura, son portables y de caractersticas fsicas similares a las de crdito. Su campo de accin es enorme: se utilizan en el mercado bancario, la telefona prepagada y tarjetas para transporte, entre otros. Dada su portabilidad y capacidad de memoria tambin se pueden usar para almacenar informacin muy importante como es el historial clnico. En pases como Francia y Alemania ya se han implementado para la prctica de almacenar la informacin mdica. Nos hemos motivado a explotar este recurso porque en nuestro pas todava no se ha puesto en prctica el uso de la tarjeta plstica inteligente en el campo de la medicina, adems, desarrollando este proyecto tambin demostraremos que en Colombia estamos en capacidad de implementar dispositivos con aplicaciones muy importantes, de bajo costo y tiles para la sociedad, lo cual permitir su comercializacin dentro de todos los estratos sociales, o la puesta en funcionamiento de manera masiva por parte de las entidades de salud (EPS, IPS, etc)

- 12 -

IEL2-I-05-39 IEL2-I-05-41

3. ESTADO DEL ARTE

Las tarjetas inteligentes cada da sustituyen ms a las tarjetas de banda magntica porque realizan las mismas funciones pero pueden ofrecer mayor seguridad, confiabilidad y duracin de la informacin. Debido a la gran flexibilidad que presentan en trminos de capacidad de memoria, seguridad y flexibilidad en el uso que se le puede dar a la informacin contenida; se utilizan en muchos tipos de aplicaciones, dentro de los cuales encontramos: Tarjetas telefnicas. Monederos electrnicos. Tarjetas de Acceso de identificacin. Tarjetas GSM (Usadas en los telfonos celulares). Tarjetas para transporte. Tarjetas para televisin. Almacenamiento de historiales mdicos.

Para determinar cuales investigaciones y trabajos se han realizado sobre el tema de las tarjetas inteligentes, inicialmente comenzamos nuestra bsqueda dentro de la Universidad, donde se investigaron tesis sobre el uso y las aplicaciones de las tarjetas inteligentes en reas similares, encontrando tres que hablan especficamente sobre este tema: La primera, cuyo ttulo es Implementacin de monederos electrnicos en Bogot [1]. En esta tesis se hace un estudio para la implementacin de telfonos monederos en Bogota. La segunda denominada Influencia del apoyo a Empresas innovadoras de soluciones tecnolgicas en Colombia, sobre el desarrollo y maduracin del mercado de tarjetas inteligentes en el pas [2], y finalmente la tercera titulada Anlisis del servicio del carn inteligente, monedero electrnico, de Conavi y Redeban en la Universidad de los Andes [3]. De lo anterior podemos deducir que hasta ahora el tema de las tarjetas plsticas inteligentes solo ha sido tratado en forma terica en nuestra Universidad y que ste ser el primer proyecto terico-prctico que relaciona las tarjetas inteligentes con el historial mdico. - 13 -

IEL2-I-05-39 IEL2-I-05-41

Saliendo de nuestras fronteras encontramos que varios pases, en su mayora europeos, han emprendido programas que pretenden generalizar el uso de las tarjetas inteligentes como medio para almacenar historiales mdicos. Como naciones lderes en los adelantos tecnolgicos de este tema, podemos nombrar a Francia y Alemania. Estos dos pases aunque persiguen la misma meta, han atacado el problema desde dos puntos de vista diferentes: en Francia se pretende implementar un sistema sofisticado que tambin permita usar la tarjeta como un medio para realizar las transacciones pertinentes con las compaas aseguradoras, este uso requiere de sistemas de alta seguridad, encriptacion y firmas digitales; iniciaron el proyecto en cuatro ciudades donde ya realizaron pruebas y experimentacin, de acuerdo a los resultados procedieron a generalizarlo en todo el territorio francs. Por otra parte, Alemania, tiene como objetivo principal poder desarrollar un sistema bastante econmico y cuya implementacin sea muy rpida, razn por la cual, la tarjeta que han considerado y estn utilizando posee una memoria de baja capacidad y su costo es muy bajo. Esto ha permitido que en la actualidad ms de 80 millones de alemanes posean una tarjeta inteligente. En su proyecto, los alemanes se han concentrado en almacenar los datos ms relevantes de las personas tales como el nmero de identificacin del seguro, nombre, direccin, fecha de nacimiento. De acuerdo con lo anterior encontramos que no todas las tarjetas se usan para almacenar historiales mdicos, por esta razn y de acuerdo con Health Data Resources, Inc [4] (Empresa dedicada a proveer sistemas de informacin sobre la salud), segn la clase y cantidad de informacin que se almacene, su aplicacin puede ser divida en seis categoras: Tarjetas de Memoria: Adaptadas para almacenar datos especficos en reas como la cardiologa, diabetes, dilisis, maternidad, oncologa, medicina pulmonar o farmacia. Pasaporte de Salud: Estas tarjetas contienen informacin del historial mdico y tambin datos importantes acerca del seguro mdico. Tarjetas de Seguro: Contienen nicamente informacin pertinente a las compaas aseguradoras con el fin de realizar pagos y ser usada en los servicios prestados por las mismas. Tarjetas de Emergencia Mdica: Tiene grabada la informacin personal y los datos ms importantes del historial mdico que pueden necesitarse y ser tiles en caso de que se presente una emergencia. - 14 -

IEL2-I-05-39 IEL2-I-05-41

Tarjetas de Admisin Hospitalaria: Estas tarjetas poseen los datos de la pliza de la compaa aseguradora y tambin la informacin demogrfica. Tarjetas de Salud Universales: Contiene informacin de la compaa aseguradora as como tambin el nmero de identificacin de la persona y los vnculos del historial mdico del paciente.

- 15 -

IEL2-I-05-39 IEL2-I-05-41

4. OBJETIVOS

4.1 Objetivo General Disear, construir y poner en funcionamiento un programa confiable y seguro para almacenar la informacin mas relevante del historial clinico de las personas, tanto en el formato de una tarjeta plstica inteligente como en un sistema de archivos que permite administrarlos desde Internet. 4.2 Objetivos Especficos: Elaborar un programa que permita la comunicacin entre dispositivo lector- escritor, el computador y la tarjeta inteligente. el

Disear y construir un dispositivo lector-escritor para la tarjeta inteligente seleccionada. Disear e implementar un programa que permita actualizar los datos mdicos histricos en la base de datos central por medio de un portal en Internet. Disear un software que facilite la introduccin de informacin relevante del historial clnico a la tarjeta inteligente. Implementar un mtodo de encriptacin que garantice la seguridad de la informacin almacenada tanto en la tarjeta como en el portal de Internet.

- 16 -

IEL2-I-05-39 IEL2-I-05-41

5. DEFINICIN DEL PROBLEMA

En nuestro medio todava prevalece la costumbre de almacenar los historiales mdicos escritos a mano en papel. Estas historias clnicas son guardadas en carpetas que se colocan en grandes archivadores, lugares en los cuales los datos se pueden perder o deteriorar con los aos, adems. La experiencia nos confirma que en este sistema, el tiempo de bsqueda es alto y la labor de actualizacin es muy dispendiosa. Desde hace varios aos se ha iniciado el proceso de digitalizacin de estos datos, lo cual ha mejorado sustancialmente el tiempo de bsqueda y actualizacin, sin embargo, actualmente en Colombia no existe un sistema que le permita a los pacientes llevar consigo esta clase de informacin o disponer de ella en un lugar virtual para ser descargada en caso de ser necesario. Son evidentes las ventajas que se lograrn si se tiene disponible el historial mdico en cualquier momento o lugar. Esta informacin facilitar enormemente el trabajo del personal mdico; por ejemplo, si una persona sufre un accidente y porta la tarjeta inteligente actualizada, el mdico o paramdico que va a prestarle ayuda y primeros auxilios, puede consultar rpidamente el grupo sanguneo del paciente, las enfermedades que tiene o ha sufrido y las posibles alergias que padezca, con esta informacin la persona que est atendiendo la emergencia, con toda seguridad y tranquilidad podr tomar las decisiones que sean necesarias. Cuando ya est en uso la tarjeta y se tenga implementada la plataforma bsica, los datos farmacolgicos sobre drogas aplicadas, posibles alergias, contraindicaciones del individuo y cualquier otra informacin relevante, se podrn almacenar y actualizar con toda seguridad. Con este proyecto suministraremos herramientas para hacer porttil esta informacin al permitirle a las personas que con toda seguridad puedan llevar siempre consigo tan valiosa informacin, como lo es su historia clnica; la guardar dentro de una tarjeta delgada y liviana, adems, tambin suministramos los medios para que este historial se guarde y actualice con facilidad en un portal de Internet. - 17 -

IEL2-I-05-39 IEL2-I-05-41

6. TARJETAS INTELIGENTES

6.1

Historia

El nacimiento de las tarjetas se remonta a los aos 50 cuando en los Estados Unidos, Diners Club elabora la primera tarjeta plstica utilizando el novedoso material sinttico PVC que garantizaba una larga vida. Esta tarjeta fue exclusivamente diseada para el pago de cuentas, no tena capacidad para almacenar datos o de seguridad, solo llevaba impresos el nombre de la empresa Diners Club y la identificacin de propietario de la tarjeta, de esta manera se certificaba el buen nombre del portador, lo cual era aceptado por varios hoteles y restaurantes que permitan el pago de la cuenta a plazos. Luego incursionaron otras empresas en el negocio de las ventas a crdito, expidiendo tambin sus tarjetas plsticas, sin embargo el fraude se convirti en el primer problema a combatir, ya que muchas eran falsificadas. Se dedujo que era necesario implementar algn tipo de seguridad para poder identificar al usuario, y para dar solucin se introdujo la tarjeta de banda magntica que permite almacenar informacin especfica para verificar la identidad del usuario. Actualmente este tipo de tarjeta todava se sigue utilizando a pesar de que se han descubierto muchos puntos dbiles de la misma, dentro de los cuales est el que existe la posibilidad de que alguien no autorizado pueda leer o borrar los datos contenidos en ella. Considerando las debilidades expuestas anteriormente, se vio la necesidad de disear un nuevo tipo de tarjeta la cual brindara mayor seguridad al usuario. Respondiendo a esa necesidad, se desarrolla la ltima tecnologa de tarjeta plstica y son las llamadas tarjetas inteligentes; Nacieron a finales de los aos 60 e inicios de los 70, pues en 1968, los inventores alemanes Jrgen Dethloff y Helmut Grtrupp registraron la primera patente relacionada con tarjetas ICC (Tarjeta de Circuito Integrado), sin embargo en los aos 70 el japons Dr. Kunitake Arimura, desarrolla el primer concepto de tarjeta inteligente cuando instal un chip en una tarjeta plstica.

- 18 -

IEL2-I-05-39 IEL2-I-05-41

En 1984 se registra el primer uso comercial de las tarjetas inteligentes, cuando la empresa francesa PTT (Servicios de Telecomunicaciones y Correo) realiz una prueba de campo para emplear este tipo de tarjetas como monederos telefnicos. En 1986 el nmero de tarjetas telefnicas en uso en Francia superaba varios millones [5]. 6.2 Tipos de Tarjetas Inteligentes

Tarjetas de memoria: Son usadas especficamente para almacenar informacin, porque poseen dos memorias, una EEPROM (Memoria de solo lectura, elctricamente programable y borrable) y otra RAM (Memoria de Lectura y Escritura), por medio de las cuales se realiza el protocolo que permite el almacenamiento de datos en la misma. Sin embargo debido a que la totalidad del espacio es usado para almacenar informacin, no poseen sistemas para evitar la lectura o escritura por personas no autorizadas, es por esta razn que se requiere encriptar la informacin que se va a almacenar. Algunas tarjetas de memoria incorporan un sistema de verificacin de clave que permite la lectura y escritura de la misma, pero con esto su costo se incrementa. Tarjetas de microprocesador: Han sido diseadas para ejecutar aplicaciones ms avanzadas que las realizadas por una tarjeta de memoria, ya que adems de poseer la memoria RAM y EEPROM, estas incluyen una CPU (Unidad Central de Proceso) y una memoria ROM (Memoria de solo Lectura). En estas tarjetas el sistema operativo generalmente se encuentra almacenado en la memoria ROM; la CPU usa la memoria RAM para almacenar los datos necesarios para procesar una determinada aplicacin [6]. Caractersticas Fsicas de las Tarjetas

6.3

Las caractersticas fsicas de estas tarjetas se encuentran reglamentadas por la norma ISO/IEC 7810, dentro de la que se contemplan tres tamaos diferentes, referenciados ID-1, ID-2 e ID-3. El formato de tarjeta que se usa en este proyecto es el ms comn, corresponde al tamao ID-1, cuyas caractersticas se detallan a continuacin:

- 19 -

IEL2-I-05-39 IEL2-I-05-41

La funcin bsica de una tarjeta de tipo ID-1 es que debe contener informacin de tipo visual, tctil y electrnica, de manera que pueda identificar a su dueo. La informacin visual puede ser presentada con trabajos artsticos como fotos o formatos de autenticacin que no interfieran en el funcionamiento de la tarjeta, tales como hologramas o cdigos de barras. Se le puede aadir informacin electrnica y adicionando una banda magntica a la tarjeta inteligente se le puede incrementar la seguridad a dicha tarjeta. La tarjeta debe ser elaborada en PVC (clorhidrato de polivinilo), acetato de PVC o materiales que contengan la misma o mejor calidad que los antes mencionados. Una tarjeta que se ajuste al formato ID-1 debe tener las siguientes dimensiones: Longitud: 85.6 mm, altura: 53.98 mm espesor: 0.76 mm.

Figura 1. Dimensiones de una tarjeta tipo ID 1 [10].

Las tarjetas deben contener un espacio para insertar el chip y su respectivo conector de ocho contactos, de los cuales se usan 6 cada uno de los cuales cumple las siguientes funciones: 1. 2. 3. 4. 5. 6. 7. Alimentacin (Vcc) RST Seal de Reloj (SCL) Reservado para uso futuro. Tierra (GND) Voltaje de programacin externo (VPP) Seal de comunicacin entrada/salida (SDA) - 20 -

IEL2-I-05-39 IEL2-I-05-41

8. Reservado para uso futuro Dependiendo del tipo de tarjeta, cada una puede usar menos conectores, sin embargo la posicin normalizada de las seales en los conectores no se puede cambiar.

Figura 2. Numeracin y funcin de los conectores [10].

La norma que estandariza las tarjetas tambin incluye un conjunto de caractersticas que deben cumplir para garantizar la seguridad fsica de la informacin contenida dentro de las mismas: 1. Resistencia a rayos ultravioleta. 2. Resistencia a rayos X. 3. La diferencia entre el nivel de los contactos y la superficie de la tarjeta debe ser menor a 0.1mm. 4. Resistencia a la presin mecnica causada por una bola de acero de 1.5 mm. de dimetro en la cul se aplica una fuerza de 1.5 N. 5. EL valor de la resistencia entre dos pines cualquiera, no puede sobrepasar 0.5 Ohmios. 6. Resistencia a la exposicin de campos electromagnticos. 7. Debe resistir a la descarga de un condensador de 100 Picofaradios a 1500 Voltios, en serie con una resistencia de 1500 Ohmios, aplicada entre cualquier pin y tierra.

- 21 -

IEL2-I-05-39 IEL2-I-05-41

7. ENCRIPTACIN

7.1.

Historia

La encriptacin existe desde hace cientos de aos. Surge como respuesta a la necesidad de enviar mensajes cifrados para evitar que otras personas no se enteraran de su contenido. La primera persona en usar la encriptacion fue Julio Cesar quien corra el alfabeto un determinado numero de caracteres, de esta manera cada letra se transformaba en otra, generando de esta manera un mensaje incomprensible si no se conoca la regla de desencriptacion. Desde esa poca la criptografa ha evolucionado, incrementndose en nmero y calidad los algoritmos de encriptacin. Algunos de los algoritmos mas importantes son: Triple DES [7], se origina del algoritmo estndar de encriptacion de datos (DES), creado en 1970 que inclua una clave de 56 bits para permitir la desencriptacion de los datos, sin embargo debido a la evolucin de los computadores y el aumento en la velocidad de los mismo este cdigo poda ser descifrado en varios das y algunas veces en pocas horas. La solucin a este problema surgi con el algoritmo Triple DES, el cual encripta la informacin tres veces usando el algoritmo DES, generando de esta manera un cdigo que requiere de tres claves para ser descifrado, de esta manera un documento que ha sido encriptado usando este mtodo requerira de millones de aos para descifrar el cdigo por el mtodo de fuerza bruta, el cual consiste en recorrer todas las claves posibles hasta descifrar el cdigo. Actualmente el cdigo de encriptacion ms confiable es Rijndael creado por Vincent Rijmen y Joan Daemen, el cual es un algoritmo de encriptacion simtrico que puede procesar palabras de 128 bits, por medio de palabras clave de 128, 192 y 256 bits 1 . Despus de un arduo proceso de seleccin, en los Estados Unidos se eligi este algoritmo que naci en septiembre de 1997, fue ejecutado por el NIST (Instituto
1

Si se desea profundizar en este algoritmo refirase a [8].

- 22 -

IEL2-I-05-39 IEL2-I-05-41

Nacional de Estndares y Tecnologa), sin embargo se debi esperar hasta el ao 2000, cuando el cdigo Rijndel fue elegido como el Estndar de Encriptacion Avanzado (AES). 7.2. Aspectos Legales

En la medicina existen cdigos de tica en los cuales los mdicos se comprometen a usar sus conocimientos para el bien de sus pacientes, entre los que se encuentra el juramento hipocrtico, adems tambin existe la nocin de secreto mdico, el cual se fundamenta en la confianza que existe entre el mdico y el paciente, de esta manera en el caso de un historial mdico, el paciente tiene todo el derecho de acceder a su historial mdico, siempre y cuando se encuentre acompaado por un mdico quien es el responsable del archivo. Tambin existen reglas y sugerencias para mantener la intimidad de los pacientes sobre su historial mdico, como se indica en el Inventario de las reglas y de lo, si se desea profundizar en este algoritmo refirase a [8]s deberes del mundo de la salud en lo que concierne a seguridad: - Todas las precauciones deben ser tomadas con el fin de asegurar la seguridad de la informacin personal de los pacientes, los profesionales de la salud se comprometen a no comunicar las claves personales que protegen el acceso a informacin personal con el fin de modificarla. Estas claves debern contener nmeros y letras y evitar mnemnicos, nombres o fechas especiales - Se debe mantener una base de datos para revisar los archivos y guardarlos en un lugar seguro [9]. Debido a que el historial mdico de un paciente no se puede cambiar a su voluntad ni tampoco lo pueden hacer personas ajenas, es necesario implementar bases de datos seguras protegidas mediante claves secretas, similares a las que protegen los historiales clnicos de las tarjetas que evitan la modificacin de los mismos. Sin embargo a pesar de que la seguridad se aplica a todos los sistemas, existe la posibilidad que sta pueda ser vulnerada de alguna manera. Es por esto que en el cdigo penal de cada pas se deben incluir artculos que reglamenten este tipo de instrucciones, tal como lo podemos ver en el cdigo penal francs: Artculo 226-13: La revelacin de informacin secreta por una persona, ya sea por encargo o por una misin temporal, ser penalizada con un ao de prisin.

- 23 -

IEL2-I-05-39 IEL2-I-05-41

8. DESCRIPCION DEL SISTEMA

8.1. Especificaciones del Sistema 1. Debe ser un sistema sencillo y simple de utilizar, capaz de ser empleado por cualquier persona con conocimientos bsicos de computadores. 2. Dada la importancia de los datos que se almacenan en la tarjeta, necesariamente debe existir un respaldo de la informacin para casos en que sta se extrave. 3. La aplicacin no debe demandar la utilizacin de muchos recursos adicionales, es decir debe ser un sistema confiable, seguro y econmico. 4. El despliegue de los datos y el orden en que van a ser visualizados debe ser entendible por cualquier mdico, razn por la cual tienen que basarse en estndares. 5. La memoria debe garantizar el espacio suficiente para almacenar los datos ms relevantes que se necesitan en caso de una emergencia. 6. Adems de los datos clnicos, es importante que se tenga informacin personal, la cual permita contactar a algn familiar o amigo. 7. Debe contener un sistema de seguridad muy confiable para impedir que se cambie la informacin grabada en la tarjeta sin la autorizacin del usuario. 8. Para aprovechar al maximo el uso de las tarjetas se requiere un dispositivo porttil que permita la lectura de las mismas en cualquier lugar, brindando de forma rapida y eficaz informacin del paciente en casos de emergencia. - 24 -

IEL2-I-05-39 IEL2-I-05-41

8.2. Seleccin de la Tarjeta Inteligente El proceso de seleccin de la tarjeta obedece a un conjunto de requerimientos en el cual se consider como principal objetivo la aplicacin de este sistema en Colombia. Como vimos en [4], Alemania es el pas que actualmente tiene el mayor porcentaje de su poblacin cubierto por el sistema de tarjetas inteligentes para guardar los historiales mdicos. El sistema aplicado en ese pas ha demostrado ser de bajo costo por el tipo de tarjeta que utiliza, las cuales tienen un tamao de memoria adecuado para almacenar los datos ms importantes de cada persona. Esto incide en la rapidez con que el sistema se ha implementado en el pas. De acuerdo con lo anterior, encontramos que Alemania es el modelo que mejor se ajustara al caso colombiano, ya que en un pas como el nuestro, el costo de implementar un sistema de este tipo ser uno de los principales factores que permitan la aceptacin o rechazo del mismo. As pues, dentro de los requerimientos que deber cumplir la tarjeta, el costo ser el de mayor peso, sin embargo el objetivo bsico de este proyecto es almacenar historiales mdicos, razn por la cual otro requerimiento importante debe ser el tamao de la memoria, la cual debe permitir guardar un conjunto de datos representativo del historial mdico del paciente. Finalmente los requerimientos para la seleccin de la tarjeta son los siguientes: 1. Bajo costo. 2. Suficiente tamao de memoria. 3. Posibilidad de encontrarlas en el mercado local. 4. Tiempo de retencin de datos mayor a 75 aos (Esperanza de vida de los colombianos). 5. Bajo consumo de dispositivo portatil. corriente, para permitir larga duracion del

- 25 -

IEL2-I-05-39 IEL2-I-05-41

Luego de consultar, los tipos de tarjetas existentes en el mercado, la que se ajust ms a nuestras especificaciones fue la tarjeta Xicor X24026, la cual se seleccion por las siguientes razones: 1. Como la funcin principal de este Proyecto es almacenar informacin, una tarjeta de memoria es la que mejor se adapta a esta actividad comparativamente con una que incorpore un microprocesador porque sta quedara subutilizada en el dispositivo. 2. La tarjeta Xicor X24026 posee un tiempo de retencin de datos mayor a 100 Aos. 3. Su costo reducido, del orden de US $ 2.oo, lo cual permitir que cuando se comercialice el sistema, las podr adquirir un mplio porcentaje de la poblacin colombiana. 4. En Colombia el mercado de tarjetas inteligentes no se encuentra muy desarrollado, por lo que la compra de un modelo especfico de tarjeta es difcil, en cambio la tarjeta X24026 se puede adquirir con facilidad en el mercado local. 5. La tarjeta seleccionada tiene muy bajo consumo de energa elctrica, en estado activo consume mximo 1mA y en estado de espera su consumo es menor a 50 A. lo cual permite una muy larga duracin en caso de que el dispositivo lectorescritor utilice bateras. Adems de las ventajas antes sealadas para la tarjeta seleccionada, tambin es conveniente resaltar una desventaja; la incapacidad que tiene para proveer un sistema de seguridad que evite el robo o modificacin de la informacin. Este sistema es similar al usado en los celulares que poseen tarjetas que manejan una clave (PIN) la cual permite que el usuario pueda acceder y modificar la informacin. 8.3 Descripcin de la Tarjeta X24026

La tarjeta Xicor X24026 posee una memoria E2PROM (Memoria de solo lectura elctricamente programable y borrable) de 2048 bits tipo CMOS, la cual se encuentra organizada internamente en una matriz de 256 x 8, la que a travs de una interfase serial y un protocolo permite realizar las operaciones de lectura y escritura por medio de un bus del tipo Two Wire, en el cual se utilizan solo dos pines, cuya funcin se explica a continuacin: Reloj Serial (Serial clock SCL): A travs de este pin se sincronizan la tarjeta y el dispositivo encargado de la lectura y escritura de la misma. - 26 -

IEL2-I-05-39 IEL2-I-05-41

Dato Serial (Serial Data SDA): Es un pin bidireccional que se usa para leer y escribir datos en la tarjeta.

Figura 3. Distribucin de pines en la tarjeta X24026. [10]

Como vemos en la figura 4, la tarjeta contiene entre otros una memoria E2PROM de 2Kbits, en la que se guarda toda la informacin que posee la tarjeta, adems se encuentra un control lgico que maneja el contador de direcciones, es el encargado de manejar el apuntador que asigna la direccin a la que se realizaran las operaciones de lectura o escritura.

Figura 4. Diagrama funcional de la Tarjeta X24026 [10]

- 27 -

IEL2-I-05-39 IEL2-I-05-41

El protocolo usado por esta tarjeta se puede sintetizar de la siguiente manera: Para la realizacin de cualquier comando en la tarjeta, se debe enviar una condicin de inicio, la cual consiste en un cambio en el bus de datos pasando de 1 a 0, mientras el reloj se encuentra en el estado alto; luego de esto, se enva una cadena de ocho bits, la que contiene el valor 1010 que corresponde al tipo de tarjeta usado; en esta forma el sistema se asegura que la tarjeta insertada sea la correcta. Tambin se incluye un bit que indica la accin de lectura o escritura (1/0) que va a ser ejecutada Si la accin deseada es escritura, el dispositivo le enviar a la tarjeta la posicin para ser escrita y la tarjeta proceder a almacenar el dato. Existen otros tipos de escritura con los cuales se puede pedir que la escritura de los datos sea continua, disminuyendo de esta manera la cantidad de comandos enviados desde el dispositivo hasta la tarjeta. Cuando la operacin que se desea realizar es lectura, el procedimiento a seguir es el mismo, solamente cambia en el caso de que se solicite la lectura de una direccin diferente a la cual se accedi la ltima vez que se us la tarjeta, esto ocurrir la mayora de las veces que se acceda a la tarjeta; en estos casos se enva una direccin de lectura falsa para que el apuntador de la tarjeta se ubique en dicha posicin, despus se proceder a enviar de nuevo una condicin de inicio, seguida de la accin leer, lo cual dar lugar a que la tarjeta sea leda en la posicin deseada.

Figura 5. Protocolo para la escritura de un dato en una direccin arbitraria [10].

Tiempo de vida esperado de las tarjetas 8.4 Historial Mdico En la seleccin del formato para grabar el historial mdico se tom como gua el formato propuesto en el proyecto Historias Clnicas en Tarjetas Inteligentes realizado en la Universidad de la Repblica de Uruguay [11], sin embargo, debido a algunas restricciones de espacio que tiene la tarjeta que se est usando, a nuestro modelo de historias mdicas fue - 28 -

IEL2-I-05-39 IEL2-I-05-41

necesario suprimirle algunos datos menos relevantes, para as llegar al formato definitivo que se muestra en la Tabla 1. En este formato se han incluido los datos ms importantes del historial mdico, los cuales son fundamentales para el caso que se deba atender una emergencia.

Tabla 1. Tipo de Datos a incluir en la Tarjeta Inteligente

8.5 Dispositivo de Lectura y Escritura de la Tarjeta El dispositivo de lectura escritura est conformado por varios mdulos interconectados. All el microcontrolador es el ncleo del sistema, pues realiza todas las funciones requeridas para la lectura y escritura de la tarjeta apoyado por los mdulos de interfaz con el usuario: la tarjeta y el computador. En la Figura 5, se muestra el diagrama que describe este sistema.

- 29 -

IEL2-I-05-39 IEL2-I-05-41

Figura 6. Diagrama descriptivo del dispositivo lector escritor.

8.5.1. Alimentacin de Energa El dispositivo se ha diseado para que no solo sea usado en un lugar fijo, sino que pueda ser mvil y porttil, por lo cual su alimentacin puede provenir de la lnea de corriente alterna 110v o 220V; por medio de un adaptador de voltaje, de esta manera el mdulo de potencia se encontrar alejado del circuito, evitando interferencias por ruido que pueda provenir de la lnea de corriente alterna. Adems ste tambin puede conectarse directamente a una pila de 9V, lo cual permite que el dispositivo no tenga restricciones para ser usado en lugares aislados de un tomacorriente elctrico. El mdulo de alimentacin tiene un conector para la conexin de un adaptador de voltaje estndar al circuito, precedido de un interruptor para encender y apagar el dispositivo, y al final est conectado un regulador 7805, el cual regula el voltaje de salida para suministrar cinco voltios al dispositivo. Este regulador posee un sistema de proteccin para corte del suministro de energa por aumento de temperatura, dando un rango de operacin segura, haciendo que el sistema sea inmune a cambios en los voltajes de la red elctrica o cualquier elemento que se use como alimentacin. Tambin limita el paso de corriente en caso de corto circuito, disminuyendo enormemente la probabilidad de daar algn componente del dispositivo.

- 30 -

IEL2-I-05-39 IEL2-I-05-41

8.5.2. Conexin del Puerto Serial Para la lectura y escritura de la tarjeta el computador se conecta al dispositivo travs del puerto serial para lo cual se usa un conector DB-9. Luego se instala un integrado MAX232 cuya funcin es transformar los voltajes usados por el puerto serial del computador que oscilan entre +12 V y -12 V en 0 V y +5V respectivamente, los cuales son comprendidos por el puerto serial del microcontrolador. 8.5.3. Generador de Seal de Reloj Para la generacin de la seal de reloj se usa el circuito integrado ICL8038, el cual genera la seal de reloj requerida que est muy bien definida y es de gran confiabilidad. El circuito seleccionado tambin garantiza confiabilidad de la seal durante todo el tiempo que el dispositivo permanezca encendido, genera una frecuencia siempre constante, adems permite que el temporizador interno del microcontrolador trabaje exclusivamente para controlar la frecuencia del puerto serial. Para que este circuito emita una onda cuadrada a una frecuencia determinada, es necesario calcular las resistencias y los condensadores mostrados en la figura 7. Para esto, primero se debe definir la frecuencia a la cual trabajar el sistema y tambin se deben conocer las mximas frecuencias de funcionamiento de cada dispositivo, las cuales son: Tarjeta Inteligente X24026: 100 Khz Microcontrolador AT89C51: 921 Khz.

Figura 7. Integrado ILC8038 Diagrama para generar la seal de reloj

Analizando los parmetros anteriores, vemos que la tarjeta inteligente restringe la frecuencia mxima de operacin del sistema, por lo que se usar una velocidad de reloj menor, cercana a los 100 Khz, pero sin

- 31 -

IEL2-I-05-39 IEL2-I-05-41

alcanzarla, estando seguros de no sobrepasarla para que no se generen errores en la transmisin; para cumplir esta condicin, se ha definido usar una frecuencia de reloj de 90 Khz, para fijar este parmetro emplearemos un conjunto de ecuaciones que suministra la hoja de datos del integrado ICL8083, realizando los siguientes clculos:

t1 =

CV C (1 / 3)Vsup ply Ra Ra C = = 0.22(Vsup ply ) 0.66 I CV C (1 / 3)Vsup ply Rb Rb C = = 0.22(Vsup ply ) 0.66 I

(1)

t2 =

(2)

Utilizamos la siguiente relacin inversa entre la frecuencia y el periodo y reemplazando las ecuaciones (1) y (2) en (3) se puede hallar la frecuencia de reloj: 1 (3) f = t1 + t 2
f = 1 Ra C Rb C + 0.66 0.66 = 0.66 = 90 Khz C ( Ra + Rb )

Como se ha determinado que en la seal cuadrada, el tiempo de subida debe ser igual al tiempo de bajada, entonces se debe cumplir la siguiente igualdad: Ra = Rb = R Remplazando:
90 khz = 0.66 0.33 = 2CR CR

Despejando obtenemos la siguiente constante:


CR = 0.33 = 3.66 x10 6 hz 1 90 khz

Para mantener este valor constante, se usar un condensador de 10nf y dos resistencias de valor cercano a 366 ohmios.

- 32 -

IEL2-I-05-39 IEL2-I-05-41

8.5.4

Lectura y Escritura de la Tarjeta.

El primer paso para la implementacin del mdulo lector escritor de la tarjeta inteligente fue escoger el dispositivo que se encargara de esta tarea, el cual debe cumplir los siguientes requisitos:

Bajo costo Bajo consumo de potencia Permitir conexin con computador Permitir reprogramacin Mnimo 10 pines de entrada-salida, para permitir la conexin a la tarjeta inteligente (6 pines), puerto serial (2 pines), indicadores (2 pines),

Existen varios dispositivos que pueden realizar la operacin deseada en el sistema, como son microcontroladores, FPGA (Field Programable Gate Array) y CPLD (Complex Programmable Logic Device). De estos dispositivos se descartan los CPLD ya que no son reprogramables, lo que impedira una eventual actualizacin del sistema. Las FPGA tambin deben ser eliminadas de la lista debido a su alto costo; En la siguiente tabla reunimos el grupo de microcontroladores entre los cuales debemos escoger el que mejor se adapte al tipo de proyecto que se esta desarrollando. Marca Motorola Microchip Atmel Referencia MC68HC908 PIC16C65B AT89C51 Costo US 6 US 7.5 US 3

Tabla 2. Comparacin de costo entre Microcontroladores similares. Precios basados en informacin de distibuidores en Estados Unidos.

Se tom la decisin de usar el microcontrolador ATMEL AT89C51 por las siguientes razones:

Muy bajo costo con relacin a las otras opciones. Mayor nmero de pines de entrada salida en comparacin al MC68HC908, lo cual permiti mayor flexibilidad al realizar el diseo, pues las salidas extra se usaron como puertos para realizar pruebas en el sistema. El programa que se ha elaborado microcontrolador AT89C51. Tambin para ser usado con el se puede utilizar para

- 33 -

IEL2-I-05-39 IEL2-I-05-41

programar microcontroladores de la familia AT89SXX, los que tienen la propiedad ISP (in-system programmable), para permitir su programacin sin necesidad de sacar el microcontrolador del circuito impreso, as se agiliza el proceso de actualizacin del dispositivo en caso de ser necesario. Luego de seleccionar el microcontrolador utilizar se procedi a definir las actividades que debe realizar, las cuales son:

Recibir informacin del computador. Escribir los datos especificados en la tarjeta. Leer los datos de la tarjeta. Enviar los datos ledos al computador.

Para la comunicacin con el computador se desarroll un protocolo muy simple que permite al dispositivo lector escritor poder funcionar con programas elaborados en cualquier tipo de lenguaje de programacin. El protocolo que se sigue es el siguiente: Si el computador desea escribir datos en la tarjeta, ste le enviar una secuencia de dos caracteres iguales lo cual evita problemas de comparacin; como por ejemplo el caso que nos ocurri, en el cual el software escritor usa un tipo de ASCII extendido, diferente al usado por el microcontrolador, de esta manera no se puede comparar un caracter enviado por el computador con otro que se encuentre contenido en el microcontrolador, ya que al tener una codificacin ASCII diferente, no se podr saber que el carcter enviado es el mismo con el que se compara. Luego de aceptar la operacin de escritura de la tarjeta, el microcontrolador le informar al software que ya se encuentra listo para recibir la cadena de caracteres que se van a almacenar. Para lograr una mayor confiabilidad en el sistema la grabacin se realiza caracter a caracter, por lo que el computador le enviar uno a uno cada dato, seguido de una respuesta del microcontrolador indicando que el dato se ha escrito correctamente en la tarjeta y que est a la espera de un nuevo caracter para ser grabado. Si la accin deseada es la lectura de la tarjeta, el software enva dos caracteres diferentes, acto seguido el microcontrolador responder indicando que se acepta la accin de lectura de la tarjeta, y procede al envi de la totalidad de los datos contenidos en la tarjeta. 8.5.5. Interfaz con el Usuario. Se pretende que el dispositivo pueda ser manejado por cualquier persona que no posea conocimientos en electrnica, por lo cual la interfaz con el usuario se ha diseado de la manera ms simple posible.

- 34 -

IEL2-I-05-39 IEL2-I-05-41

El dispositivo posee nicamente un botn que corresponde al encendido y apagado del aparato, adems se dispone de dos leds: el primero indica el estado del dispositivo (encendido o apagado) y el segundo informa si se ha insertado una tarjeta. 8.5.6. Consumo de Energa

Para conocer el consumo total de energa elctrica del circuito hemos hallado el consumo de cada uno de los componentes del dispositivo lector escritor, con lo cual encontramos: Componente AT89C51 ICL 8038 MAX 232 Total Consumo mximo 71 mA 25 mA 15 mA 111 mA Potencia 355 mW 125 mW 75 mW 555 mW

Tabla 3. Consumo de Energa de los Componentes Dispositivo Lector Escritor

Figura 8. Dispositivo lector escritor.

De la tabla 3 encontramos que en el peor de los casos el sistema requerir una potencia cercana a medio watio, lo cual puede ser totalmente provisto mediante el regulador 7805, que puede entregar una potencia mxima de 2.5 w.

- 35 -

IEL2-I-05-39 IEL2-I-05-41

8.5.8

Costo del dispositivo Lector Escritor Componente Microcontrolador Generador seal SCL Conector a Tarjeta Inteligente Varios (R,C,Leds) Cable conexin al Computador Circuito Impreso Caja TOTAL Valor $US 3 2 2 1 2 3 5 18

Tabla 4. Costo del dispositivo Lector Escritor. Precios en Estado Unidos.

8.6. Programa

para

la

Interfase

entre

el

Dispositivo

Lector

Escritor con el Computador e Internet. El usuario necesita visualizar de la mejor manera posible el historial clnico almacenado en la tarjeta inteligente, con este propsito se desarroll una interfaz software entre el usuario y el sistema, el resultado obtenido es la primera versin del software que nosotros denominamos: Sistema de Almacenamiento de Historial Clnico a travs de Tarjetas Inteligentes. Esta versin contiene las funciones bsicas de lectura y escritura de las tarjetas, lo mismo que las aplicaciones para el uso de Internet. El software desarrollado ante todo satisface los requerimientos de compatibilidad y facilidad de uso porque se implement en ambiente Windows y para su programacin se utiliz la herramienta Microsoft Visual Basic 6 lo cual garantiza que se puede utilizar en casi todos los computadores. En la figura 9 se muestra la forma como se visualiza el formato de nuestro software. All se resalta la barra de herramientas la cual permite realizar las principales funciones de comunicacin con el dispositivo e Internet. Tambin se destaca el men con sus principales funciones y se pueden observar cada uno de los campos del historial clnico que se almacena en la tarjeta.

- 36 -

IEL2-I-05-39 IEL2-I-05-41

Figura 9. Sistema de almacenamiento de historial clnico a travs de tarjetas inteligentes

8.6.1 Funciones del Programa El software desarrollado permite ejecutar las siguientes funciones: A. Guardar el Historial por primera vez en la Tarjeta Inteligente El nuevo usuario una vez se ha inscrito en el servicio para almacenar su historial clnico en una tarjeta inteligente, acudir a un Centro de Servicio para que se le elabore su historial mdico y por primera vez se le haga entrega de una tarjeta con su historial clnico grabado en ella. El siguiente es el procedimiento: La persona autorizada para elaborar el archivo en las tarjetas digita la informacin del historial clnico y lo graba por primera vez en la tarjeta, posteriormente le pide al usuario que digite una clave personal la que de ese momento en adelante garantizar que la informacin de la tarjeta no podr cambiarse sin autorizacin. Una vez se ha terminado la actividad de grabar la tarjeta, el software carga en un servidor FTP (File Transfer Protocol) la informacin del nuevo usuario para poder cumplir las siguientes dos funciones: la primera es permitir que el historial clnico se pueda ver a travs de Internet y la segunda es almacenarlo encriptndolo con AES (Estndar de encriptacin avanzada), luego se realizan los correspondientes procesos de autenticacin.

- 37 -

IEL2-I-05-39 IEL2-I-05-41

Se hace notar que el software utilizado para grabar la tarjeta por primera vez, graba y actualiza el historial en la tarjeta directamente sin necesitar ninguna autenticacin; esto no ocurre con el que utilizarn las Instituciones de Salud porque en estos casos, para realizar este tipo de procedimientos, se necesita la clave del usuario. Los programas se han diseado en forma diferente para evitar que la informacin del historial mdico sea cambiada sin la autorizacin del propietario de la tarjeta. B. Lectura del Historial personal: Mdico utilizando un computador

En diferentes circunstancias, como en una consulta mdica o en un caso de emergencia, se requiere poder observar el contenido del historial clnico almacenado dentro de la tarjeta inteligente, para estos casos nuestro sistema ofrece la posibilidad de poder consultarlo de las dos formas siguientes: 1. Mediante un portal en Internet: El mdico autorizado utiliza cualquier navegador de Internet y entra en el correspondiente portal de Internet y all consulta el historial de un paciente con solo digitar el nmero de su documento; si lo desea, desde el software tambin puede seleccionar la opcin Descargar historial. Disponer del historial clnico en Internet da la gran ventaja de que se puede leer sin necesidad tener en su poder la tarjeta inteligente, adems, el mdico con su clave personal puede acceder a la informacin en cualquier momento y lugar. 2. Utilizando el dispositivo lector-escritor: Se introduce la tarjeta inteligente dentro del dispositivo lector-escritor y se selecciona el cono de lectura de tarjeta, esta operacin permite que se pueda leer la tarjeta con el solo tener el software instalado y que el dispositivo lector escritor est conectado al puerto serial del computador. Su ventaja es que no necesita conexin a Internet y como no exige ningn tipo de autenticacin, se puede leer de manera rpida en especial para casos de emergencia. C. Actualizacin del Historial Mdico en Internet y en la Tarjeta El mdico autorizado y afiliado a nuestro servicio es quien tiene acceso y puede cambiar o actualizar la informacin contenida en la tarjeta pero solo si es autorizado por el usuario de la tarjeta, porque para esto es indispensable disponer de la clave del paciente. El procedimiento se desarrolla en la siguiente forma: Inicialmente el programa genera un archivo de encriptacin como resultado de la informacin que acaba de leer de la tarjeta luego que se digit la clave del usuario, este archivo de encriptacin es comparado con el que ya existe en Internet, si los dos

- 38 -

IEL2-I-05-39 IEL2-I-05-41

archivos coinciden, la opcin es vlida y permite grabar la nueva informacin en ella; si los dos archivos no coinciden el sistema no le permite al mdico garbar en la tarjeta. Una vez se ingresa la informacin, las modificaciones se graban en la tarjeta y se actualiza en Internet el archivo de encriptacin AES con el nuevo historial. En la Figura 10 se observa la forma del software en el momento de solicitar la contrasea para ser autenticado. Se ve que los campos estn bloqueados para permitir solo la lectura de los mismos, cuando se autoriza, se desbloquean estos campos y se habilita la operacin de grabar en la tarjeta, como se observa en la Figura 11.

Figura 10. Visualizacin del proceso de Autenticacin

Figura 11. Visualizacin del proceso confirmacin de usuario

- 39 -

IEL2-I-05-39 IEL2-I-05-41

8.6.2 Caractersticas del Programa

El programa se ajusta a las necesidades del cliente potencial, gracias a su interfaz amigable y a la compatibilidad con el sistema operativo Windows. Se hace notar que, aunque el software est concebido para trabajar con el dispositivo lector escritor, tambin puede ejecutar otras funciones como: guardar/leer historiales almacenados en disco o cargar/descargar un historial desde Internet. Contiene un sistema de seguridad para la informacin que se desea almacenar en la tarjeta inteligente, con el fin de evitar que sta se cambie sin previa autorizacin del propietario de la tarjeta. Seguridad

8.6.3

Debido a que la tarjeta X24026 no posee un sistema de seguridad para evitar que sea modificada, fue necesario implementar un sistema que garantizar la seguridad de la informacin. Para esto se atac el problema desde dos puntos de vista, el primero para encriptar la informacin contenida en la tarjeta, as se impide que las personas que accedan a un lector de tarjetas inteligentes y obtengan la informacin all guardada, no puedan descifrar su contenido. El segundo mtodo aplicado consiste en usar una firma electrnica, de tal manera que si por alguna razn la informacin de la tarjeta es descifrada y cambiada, el programa se pueda enterar que la informacin se ha cambiado sin la debida autorizacin. Estos dos tipos de seguridad se explican a continuacin. 8.6.4 Encriptacin.

Como se trat en el captulo 7, la encriptacin es el mtodo por el cual un conjunto de datos son transformados en cadenas de caracteres que al parecer no tienen sentido, a travs de algoritmos de encriptacin que usan una clave secreta, la cual tambin se usa en el proceso para descifrar el mensaje. La mayora de los algoritmos de encriptacin que se usan actualmente, tales como AES (estndar avanzado de encriptacin) [8] y Triple DES (Estndar de encriptacin de datos) [7] han sido los mtodos de encriptacin ms usados porque se han puesto a prueba, sin encontrarle

- 40 -

IEL2-I-05-39 IEL2-I-05-41

fallas; sin embargo, para encriptar la informacin de manera segura es necesario un incremento de aproximadamente el 200% en el tamao del archivo encriptado respecto al original lo cual disminuye considerablemente la cantidad de memoria efectiva en la tarjeta. Debido a esto fue necesario implementar un algoritmo ms sencillo llamado Codecodexor [12] el cual no incrementa el tamao del archivo encriptado. 8.6.5 Firma Electrnica. Mtodo por el cual se puede verificar la informacin contenida en un archivo a travs de la comparacin de datos contenidos en forma electrnica en el mismo archivo con una firma previamente generada para verificar la veracidad de la informacin contenida all [13]. Adicionar la firma electrnica surge como otro medio de seguridad porque el solo uso de un algoritmo de encriptacin no asegura que la informacin no pueda ser cambiada. El mtodo de seguridad de la firma electrnica realiza dos funciones: Permite confiar en la veracidad de la informacin consignada en la tarjeta y evita la modificacin de la informacin la autorizacin del paciente. El proceso que se sigue para la autenticacin de la tarjeta es el siguiente: Cuando la tarjeta es grabada, el programa genera y localiza el archivo encriptado en el sistema de archivos de Internet usando el algoritmo AES de la informacin, a partir de una clave dada por el paciente. En esta forma, cuando se desea actualizar la informacin en la tarjeta, el programa genera nuevamente un archivo encriptado pidiendo otra vez la clave del paciente, lo compara con el que se encuentra en el sistema de archivos de Internet, si estos dos archivos coinciden se confirma la veracidad de la informacin y se podr modificar la informacin. El mtodo para la autenticacin de la informacin por medio de firma digital utiliza un algoritmo de encriptacin. Lo hemos desarrollado con el fin de que solo se requieran pequeos cambios en el cdigo del programa y en el microcontrolador del lector cuando en trabajos futuros se empleen tarjetas con mayor capacidad de memoria para almacenar el historial encriptado con AES. As se almacena el historial encriptado por medio del algoritmo AES, asegurando que la informacin contenida en la tarjeta no podr ser modificada.

- 41 -

IEL2-I-05-39 IEL2-I-05-41

8.7

El Lector Porttil.

El lector porttil aunque no se encontraba dentro de los objetivos de este proyecto se desarroll para satisfacer la necesidad de tener un dispositivo que permitiera la rpida lectura de las tarjetas, sin necesidad de poseer un computador; especficamente en una emergencia, el mdico o el paramdico pueden requerir algn tipo de informacin especfica como alergias que padece o medicamentos que est tomando la persona, para poder realizar un procedimiento urgente en el que la bsqueda de un computador no da espera.

Figura 12. Diagrama descriptivo del dispositivo lector porttil.

8.7.1. Alimentacin y Seal de Reloj. Tanto la alimentacin de energa para el sistema como el mdulo para generar la seal de reloj que permite la sincronizacin entre la tarjeta y el microcontrolador se disearon y realizaron de la misma manera que para el mdulo lector escritor, los cuales se pueden ver en las secciones 8.5.1 y 8.5.3. 8.7.2. Interfaz con el Usuario Para elaborar el dispositivo de interfaz con el usuario fue necesario implementar un mdulo que permitiera la visualizacin de los datos en una pantalla, para esto se seleccion el tipo de pantalla a utilizar, teniendo en cuenta las siguientes condiciones:

- 42 -

IEL2-I-05-39 IEL2-I-05-41

Tener bajo consumo de energa: Como es un dispositivo que se debe usar en cualquier circunstancia y lugar, tiene que poderse utilizar con bateras y adems garantizar un largo tiempo de operacin del mismo. Bajo costo. Que disponga de Pantalla iluminada. Cantidad mnima de caracteres : 30 Dimensiones fsicas proporcionales con el tamao del circuito impreso.

Las opciones disponibles de pantallas varan desde 16 caracteres hasta 640 x 480 pxeles. Como se puede observar en la Figura 8, en el mercado existe una gran cantidad pantallas, sin embargo la mayora son de valor es alto, lo cual aumentara enormemente el costo final del dispositivo, por lo que esta condicin es la que afecta en mayor porcentaje la seleccin de la pantalla. Finalmente encontramos que una pantalla de 16 x 2 cumple satisfactoriamente con los requerimientos antes propuestos. Es necesario que la pantalla posea luz de fondo, ya que aunque esto incremente el costo en un 30 %, la probabilidad de uso del dispositivo porttil se puede presentar en mayor proporcin cuando las condiciones ambientales no son las mejores.

- 43 -

IEL2-I-05-39 IEL2-I-05-41 Tabla 5. Tabla de costos en el mercado de varios tipos de pantallas.

Al igual que con el dispositivo lector escritor se enfatiza en lo sencilla que debe ser la interfaz con el usuario para que no haya inconveniente en que cualquier persona pueda manejarlo. Por esta razn se requiere que la cantidad de pulsadores sea mnima. Para esto se ha determinado situar dos pulsadores, denominados Avanzar y Retroceder, los cuales permitirn al usuario navegar a travs de la informacin almacenada en la tarjeta inteligente. Adems de la pantalla se incluyen dos elementos visuales de interfaz con el usuario: uno para informarle si el dispositivo se encuentra encendido o apagado y el otro para indicar si se ha insertado o no una tarjeta inteligente. 8.7.3. Lectura de la Tarjeta. Para la lectura de la tarjeta se utiliz un circuito base igual al empleado en el mdulo para la lectura y escritura de la tarjeta, estn conformados por el microcontrolador AT89C51, sin embargo fue necesario implementar nuevas funciones, para permitir la correcta visualizacin de los datos en la pantalla, asegurando que se muestren de manera secuencial cada vez que se presione el pulsador de avanzar o retroceder. 8.7.4 Costo del dispositivo lector portatil Componente Microcontrolador Generador seal SCL Conector a Tarjeta Inteligente Varios (R,C,Leds) Cable conexin al Computador Circuito Impreso Caja TOTAL Valor $US 3 2 2 1 2 3 5 18

Tabla 6. Costo dispositivo lector portatil

- 44 -

IEL2-I-05-39 IEL2-I-05-41

Figura 13. Dispositivo lector porttil.

Figura 14. Dispositivo Lector Porttil Ensamblado.

8.8.

Circuitos Impresos

Luego de realizar todas las pruebas necesarias en protoboard, el circuito se pas a circuito impreso, con esto se obtuvo el prototipo final. Sin embargo para su construccin, se deba conocer la potencia mxima que podra consumir el circuito impreso, para de esta manera obtener el tamao mnimo de las lneas de cobre que interconectan cada dispositivo.

- 45 -

IEL2-I-05-39 IEL2-I-05-41

Tomando los parmetros de temperatura ambiente y los niveles de consumo de corriente hallados en la seccin 8.5.6, se usaron las siguientes grficas que permiten hallar el ancho de las pistas.

Figura 15. Tablas para hallar el ancho mnimo requerido en las pistas de un circuito impreso [15].

Luego de analizar las grficas que relacionan corriente contra ancho de la pista, se encontr que stas deban tener un ancho mnino de 0.38 milmetros. Para mayor seguridad, se determin construir estos circuitos con un ancho de pistas de 0.4 milmetros. Finalmente los circuitos impresos obtenidos fueron los siguientes:

- 46 -

IEL2-I-05-39 IEL2-I-05-41

Figura 16. Circuito impreso correspondiente al Dispositivo Lector-Escritor

Figura 17. Circuito Impreso del Dispositivo Lector Porttil.

- 47 -

IEL2-I-05-39 IEL2-I-05-41

8.9. Sistema de Archivos Cualquier sistema basado en el almacenamiento de datos requiere guardar una copia de dicha informacin en un lugar alterno, de tal manera que se pueda recuperar cualquier archivo que se haya perdido o daado. En el caso del almacenamiento de historiales mdicos, este es un factor que debe ser tenido muy en cuenta, ya que una tarjeta puede perderse, ser robada, o daada por sobrepasar los lmites mximos especificados para esa tarjeta. La medicina es una ciencia que evoluciona cada da, actualmente uno de sus principales objetivos es la aplicacin de la medicina a distancia, llegando hasta la realizacin de intervenciones quirrgicas por medio de telepresencia; teniendo en cuenta estos adelantos, deseamos aportar un medio para apoyar este tipo de objetivos, el cual se basa en permitir que adems de que la informacin de historiales mdicos se encuentre guardada en Internet, tambin puedan acceder los mdicos autorizados, con esto se confirma que el sistema debe tener un sistema de seguridad alto, para evitar que alguien logre acceder a la base de datos para conocer el historial mdico de una persona determinada. Los historiales mdicos se guardarn en un sistema de archivos que se encuentra en Internet, el cual se encuentra protegido por medio de varias contraseas las que son asignadas a los mdicos que estn autorizados para entrar a dicha informacin; para acceder a esta carpeta ser necesario que el mdico que lo desee se encuentre registrado y autorizado, de esta manera podr leer el historial mdico de uno de sus pacientes sin importar el lugar en el que se encuentre, porque el nico requerimiento ser tener un computador con conexin a Internet. El procedimiento usado para mantener segura la base de datos se soporta en el mtodo de encriptacin llamado MD5 el cual permite la codificacin de las claves en una sola direccin [14], de esta manera el archivo que contiene las claves de los usuarios se encontrar totalmente encriptado. Si alguien ilcitamente logra obtenerlo, no podr conocer las claves de los mdicos porque posee un procedimiento para comparar si el usuario que ingresa al sistema est autorizado, toma la clave que acaba de ingresar, la codifica por medio de MD5 y la compara con la que se encuentra en la base de datos.

- 48 -

IEL2-I-05-39 IEL2-I-05-41

8.10.

Pgina de Internet

Para ofrecer un ambiente amable en el que los mdicos puedan ver los historiales clnicos, se ha desarrollado la pgina Historiales Mdicos Colombia, la cual es un prototipo de la que se usara cuando los dispositivos lector escritor y la tarjeta sean comercializados. Esta pgina ha sido diseada de tal manera que sea similar a la real de cualquier empresa, all se encuentran los siguientes vnculos: Presentacin: Se describe y explica la funcin de la pgina, mostrando la importancia que tendr el sistema al ser implementado en el pas. Misin: En este vnculo se presenta la misin que se pretende alcanzar con este proyecto. Visin: Aqu encontramos las metas que se propone cumplir la empresa, dentro de los cuales se hace nfasis en propender por que algn da todos los colombianos posean una tarjeta de salud. Poltica: Se habla de los compromisos que ha adquirido Historiales Mdicos Colombia, dentro de los cuales se encuentra el diseo y desarrollo de este tipo de productos. Productos: Se especifican los productos a comercializar por la empresa, dentro de los que se encuentran el dispositivo lector-escritor y el dispositivo lector porttil.

Figura 18. Ingreso a la Zona Segura desde la Pgina de HMC.

- 49 -

IEL2-I-05-39 IEL2-I-05-41

Historiales: Finalmente encontramos el vnculo que nos lleva hacia la zona restringida, la cual solo puede ser accesada por los mdicos que estn autorizados para ver los historiales de sus pacientes. Al ingresar a la zona segura, encontramos un buscador, que nos facilita la exploracin en el sistema de archivos y agiliza la bsqueda de un historial mdico determinado, para esto solo se debe ingresar el nmero de identificacin del paciente.

Figura 19. Pagina de acceso al sistema de archivos restringido que contiene los historiales mdicos.

- 50 -

IEL2-I-05-39 IEL2-I-05-41

9.

RESULTADOS

Tanto el sistema como los prototipos finales se sometieron a pruebas. Ejecutaron las mismas funciones que se deben realizar en funcionamiento normal del programa cuando sea implementado definitivamente; durante estas pruebas se realizaron las siguientes actividades:

Se crearon nuevos historiales en el software Grabar una nueva tarjeta con dicho historial Crear nuevos archivos tanto en la base de datos como en Internet Pruebas para reinicio total del sistema Grabar, actualizar, y leer la historia clnica desde la tarjeta inteligente. Grabar, actualizar y leer la historia clnica desde Internet. Guardar y leer la historia clnica desde el disco. Descargar desde Internet la Historia mdica. Imprimir la historia mdica.

Despus de realizar y repetir estas pruebas en diferentes secuencias y en varias oportunidades, se revis la informacin final almacenada tanto en la tarjeta como en la base de datos de Internet, los cuales no sufrieron cambios no deseados y coincidieron dando la misma informacin con los datos correctos sobre cada paciente de prueba. Algunos inconvenientes que se presentaron durante el desarrollo del proyecto fueron de orden tcnico y comercial, teniendo las siguientes dificultades ms relevantes:

Dificultad para la consecucin de diferentes clases de tarjetas, tanto por su alto costo, porque no las haba en el mercado o porque su tiempo de entrega era muy mplio, este caso especfico se present con la adquisicin de la tarjeta XICOR 76041 que cuenta con una memoria de 4Kbits, la cual se recibi pocos das antes de la finalizacin del proyecto y la disponibilidad de tiempo no permiti utilizarla porque maneja un protocolo diferente. La disponibilidad de instrumentos y equipos de programacin en el laboratorio en algunas ocasiones demoraron las pruebas, lo cual perjudica el cronograma de trabajo.

- 51 -

IEL2-I-05-39 IEL2-I-05-41

Figura 20. Componentes del Sistema Ensamblado.

- 52 -

IEL2-I-05-39 IEL2-I-05-41

10. CONCLUSIONES

Se implement un sistema que permite almacenar los historiales clnicos de manera eficiente y econmica por medio de tarjetas inteligentes. El sistema desarrollado est conformado por un dispositivo lector-escritor, un portal en Internet y un software de visualizacin y actualizacin. Comparativamente con el sistema implementado en Alemania, donde usan una tarjeta con capacidad de memoria igual a la que empleamos en nuestro sistema, la cantidad de informacin personal que graban en esa tarjeta es muy reducida, en cambio nuestro sistema permite almacenar mayor cantidad de datos relevantes del historial clnico, a cambio de una leve disminucin en la seguridad de la tarjeta. Con xito ya se ha contrarrestado la disminucin que se origin en la seguridad de la tarjeta, para lo cual se implement un sistema de doble seguridad a travs de una encriptacin y de la firma electrnica (AES).
Los resultados obtenidos son satisfactorios, pues se lograron disear y construir todos los prototipos necesarios para poner en funcionamiento el sistema. El costo de los prototipos que se construyeron muy bajo (16 dolares), lo cual afirma que este es un proyecto que puede ser muy rentable en todos los aspectos: mdico, tcnico social y primordialmente econmico. Como se puede verificar, la forma y las dimensiones de los prototipos son muy reducidas, es decir son de fcil implementacin porque no presentarn inconvenientes tcnicos, de espacio o de transporte.

Gracias a las pruebas realizadas tanto en el software como en el hardware, la tarjeta y los dispositivos ejecutaron correctamente sus funciones, esto demuestra que son herramientas tiles, confiables y seguras. - 53 -

IEL2-I-05-39 IEL2-I-05-41

11.

PERSPECTIVAS

Este proyecto constituye un primer paso en nuestra universidad con miras en extender el estudio de aplicaciones biomdicas generadas a travs del uso de tarjetas inteligentes. Este sistema se encuentra listo para su comercializacin en cuanto a las funciones especificadas y a los requerimientos descritos. Puede ser mejorado utilizando una tarjeta con mayor capacidad de memoria. Gracias a que en el software se implement el mtodo de encriptacin AES usado en la autenticaron del usuario, pequeos cambios podrn realizarse en el programa para permitir que este archivo encriptado no solo se guarde en Internet, sino tambin en un nuevo tipo de tarjeta con mayor capacidad de almacenamiento. Para la comercializacion del producto se requerir ejecutar un conjuto de pruebas para asegurar que el dispositivo funcionara correctamente en diferentes condiciones ambientales, entre las cuales tenemos:

Pruebas a temperaturas y niveles de humedad extremas Duracion de baterias Pruebas de resistencia fisica

El sistema fue desarrolado para ser usado con la tarjeta X24026, sin embargo cada dia se procducen mejores tarjetas por lo cual en el futuro podra ser necesario realizar cambios en el software del microcontrolador para que el dispositivo lector-escritor y el dispositivo porttil sean compatibles con nuevos tipos de tarjetas.

- 54 -

IEL2-I-05-39 IEL2-I-05-41

REFERENCIAS

[1] Implementacin de monederos electrnicos en Bogot Cortzar Cardoso, Jorge Nicols 2004 [2] Influencia del apoyo a empresas innovadoras de soluciones tecnolgicas en Colombia sobre el desarrollo y maduracin del mercado de tarjetas inteligentes en el pais. Ramrez Nio, Mnica Alejandra. [3] Anlisis del servicio del carn inteligente, monedero electrnico, de Conavi y Redeban en la Universidad de los Andes.Tarazona Gmez, Sergio [4] About SmartCards HealthData Resources, Inc. Como son usadas las tarjetas en el cuidado de la salud?. http://www.hdata.com/smartcard/smartcard.htm [5] Introduction to Smart Cards. SSP Litronic White Paper.Saf Link corporation. Pag. 1-2. [6] Smart Card Tutorial. Smart Card Group. 1992. Pag 13 18. [7] Data Encryption Standard. Federal Information. Processing Standards Publication 46-3. Octubre 25 de 1999. [8] Specification for the ADVANCED ENCRYPTION STANDARD (AES) Federal Information. Processing Standards Publication 197. Noviembre 26, 2001 [9] Le Ple Scurit. Publication des principaux documents de lanne 2000. E. Blanc, P. Bartaire, E. Duprinez. Diciembre 18 de 2000. Pag 27 [10] Hoja de datos de la Tarjeta Inteligente X24026 www.icmic.com/datasheets/X24026.pdf

- 55 -

IEL2-I-05-39 IEL2-I-05-41

[11]

Historias Clnicas en Tarjetas Inteligentes. Ing. Leonardo Rodrguez, Ing. Daniel Perovicha, Ing. Martn Varela, Dr. Lus Martnez.

[12] CodedeodeXor Sample routine to encrypt and unencrypt a string. H Mandirola. Febrero 14 de 2005. http://www.a1vbcode.com/snippet- 3213.asp [13] Signature lectronique. Ralits techniques et juridiques. 2001. [14] The MD5. Umang Beri. University of Rochester. [15] Using the IPC Temperature Charts. Ultracad www.ultracad.com/using_ipc_temp_charts.pdf

- 56 -

IEL2-I-05-39 IEL2-I-05-41

ANEXOS

Anexo 1. Programa del microcontrolador en el dispositivo lector escritor.


#include <stdio.h> #include <intrins.h> sbit scl =P1^1; //P1.1 es Serial Clock sbit sda =P1^2; //P1.2 es Serial Data sbit P1_3=P1^3; sbit P1_4=P1^4; sbit P1_5=P1^5; sbit P1_6=P1^6; sbit P1_7=P1^7; sbit P2_0=P2^0; sbit P2_1=P2^1; sbit P2_2=P2^2; sbit P2_3=P2^3; sbit P2_4=P2^4; sbit P2_5=P2^5; sbit P2_6=P2^6; sbit P2_7=P2^7; //------------------------------------------------------------------------unsigned char rw,ack,dir,dirbit[8],datobit[8],dato,datoaconvertir,diraconvertir,datorecup,escriba,lea; unsigned char i,j,k,l,m,n,p,q,r,temp; //------------------------------------------------------------------------void esperabajo() //Esperar a que scl baje { while (scl==1) {} } //------------------------------------------------------------------------void esperaalto() //Esperar a que scl se ponga en alto { while (scl==0) {} } //------------------------------------------------------------------------void esperapulso() { esperaalto(); //Esperar a que scl suba esperabajo(); //Esperar a que scl baje } //------------------------------------------------------------------------void esperavalle() { esperabajo(); //Esperar a que scl baje esperaalto(); //Esperar a que scl suba } //------------------------------------------------------------------------void acknlowledge()

- 57 -

IEL2-I-05-39 IEL2-I-05-41

{ if (ack==1) { putchar('#'); //aqui se debe hacer de nuevo la ultima accin de lectura } } //------------------------------------------------------------------------void pedirdato() { #ifndef MONITOR51 SCON = 0x50; // SCON: modO 1, 8-bit UART, recibir TMOD = 0x20; // TMOD: timer 1, modo 2, 8-bit recarga TH1 = 253; // TH1: recarga valor para 9600 baudios @ 11.0592MHz TR1 = 1; // TR1: timer 1 inicio TI = 1; #endif dato=getchar(); } //------------------------------------------------------------------------void datobienescrito() { #ifndef MONITOR51 SCON = 0x50; // SCON: modo 1, 8-bit UART, recibir TMOD = 0x20; // TMOD: timer 1, modo 2, 8-bit recarga TH1 = 253; // TH1: recarga valor para 9600 baudios @ 11.0592MHz TR1 = 1; // TR1: timer 1inicio TI = 1; #endif putchar('*'); } //---------------------------------------------------------------------------void enviardato() { #ifndef MONITOR51 SCON = 0x50; // SCON: modo 1, 8-bit UART, recibir TMOD = 0x20; // TMOD: timer 1, modo 2, 8-bit recarga TH1 = 253; // TH1: recarga valor para 9600 baudios @ 11.0592MHz TR1 = 1; // TR1: timer 1 inicio TI = 1; #endif putchar(datorecup); } //---------------------------------------------------------------------------void desconvertir() { datorecup=datobit[0]+(2*datobit[1])+(4*datobit[2])+(8*datobit[3])+(16*datobit[4])+(32*datobit[5]) +(64*datobit[6])+(128*datobit[7]); } //---------------------------------------------------------------------------void convertirdato() { p=0; while (p!=8) { datobit[p]=datoaconvertir%2;

- 58 -

IEL2-I-05-39 IEL2-I-05-41

p++; datoaconvertir=datoaconvertir/2; } } //-----------------------------------------------------------------void convertirdir() { p=0; while (p!=8) { dirbit[p]=diraconvertir%2; p++; diraconvertir=diraconvertir/2; } P2_0=dirbit[0]; P2_1=dirbit[1]; P2_2=dirbit[2]; P2_3=dirbit[3]; P2_4=dirbit[4]; P2_5=dirbit[5]; P2_6=dirbit[6]; P2_7=dirbit[7]; } //------------------------------------------------------------------------Void leer() { //----------------------- BIT DE INICIO ---------------------------esperabajo(); sda=1; // Se alista para la condicion de inicio esperaalto(); sda=0; // Envia condicion de inicio sda = (alto -> bajo) scl = alto esperabajo(); //---------------------- PROTOCOLO PARA LEER ------------------sda=1; // Envia primer 1 de la direccion esclava -> 1 esperapulso(); sda=0; // Envia primer 0 -> 0 esperapulso(); sda=1; // Envia segundo 1 -> 1 esperapulso(); sda=0; // Envia segundo 0 -> 0 esperapulso(); sda=0; // 1er Bit de reserva -> 0 esperapulso(); sda=0; // 2do Bit de reserva -> 0 esperapulso(); sda=0; // 3er Bit de reserva -> 0 esperapulso(); sda=1; // LEER -> 0 esperapulso(); ack=sda; esperaalto(); ack=sda; // Se recibe acknowledge acknlowledge(); // Analisis de acklowledge esperabajo(); //------------------- LECTURA DEL DATO --------------------------P1_6=0; esperaalto(); P2_0=sda; // Recibe dato 1

- 59 -

IEL2-I-05-39 IEL2-I-05-41

datobit[7]=sda; esperavalle(); P2_1=sda; datobit[6]=sda; esperavalle(); P2_2=sda; datobit[5]=sda; esperavalle(); P2_3=sda; datobit[4]=sda; esperavalle(); P2_4=sda; datobit[3]=sda; esperavalle(); P2_5=sda; datobit[2]=sda; esperavalle(); P2_6=sda; datobit[1]=sda; esperavalle(); P2_7=sda; datobit[0]=sda; esperabajo(); sda=0; esperapulso();

// Recibe dato 2

// Recibe dato 3

// Recibe dato 4

// Recibe dato 5

// Recibe dato 6

// Recibe dato 7

// Recibe dato 8

// La tarjeta lee el acknowledge

//---------------- BIT DE PARADA----------------------------------sda=0; esperaalto(); sda=1; esperabajo(); //---------------- FIN DE LECTURA-----------------------------------} //------------------------------------------------------------------------void escribir() { //------------------- BIT DE INICIO -----------------------------------esperabajo(); sda=1; // Se alista para la condicion de inicio esperaalto(); sda=0; // Envia condicion de inicio sda = (alto -> bajo) scl = alto esperabajo(); //------------------------------------------------------------------------//-- INICIO DE COMUNICACION CON TARJETA MODO ESCRIBIR ---sda=1; // Envia primer 1 de la direccion esclava -> 1 esperapulso(); sda=0; // Envia primer 0 -> 0 esperapulso(); sda=1; // Envia segundo 1 -> 1 esperapulso(); sda=0; // Envia segundo 0 -> 0 esperapulso(); sda=0; //1er Bit de reserva -> 0 esperapulso(); sda=0; // 2do Bit de reserva -> 0 esperapulso(); sda=0; // 3er Bit de reserva -> 0 esperapulso(); sda=0; // ESCRIBIR -> 0

- 60 -

IEL2-I-05-39 IEL2-I-05-41

esperapulso(); ack=sda; esperaalto(); ack=sda; // Se recibe acknowledge acknlowledge(); // Analisis de acklowledge esperabajo(); //--------------------------------------------------------------------//-------------- DIRECCION EN LA QUE SE VA A ESCRIBIR ---sda=dirbit[7]; esperapulso(); // Direccion 0 Bit 1 sda=dirbit[6]; esperapulso(); // Direccion 0 Bit 2 sda=dirbit[5]; esperapulso(); // Direccion 0 Bit 3 sda=dirbit[4]; esperapulso(); // Direccion 0 Bit 4 sda=dirbit[3]; esperapulso(); // Direccion 0 Bit 5 sda=dirbit[2]; esperapulso(); // Direccion 0 Bit 6 sda=dirbit[1]; esperapulso(); // Direccion 0 Bit 7 sda=dirbit[0]; esperapulso(); // Direccion 0 Bit 8 ack=sda; esperaalto(); ack=sda; esperabajo(); //--------------------------------------------------------------------//--------------------- DATO QUE SE VA A ESRIBIR---------------sda=datobit[7]; esperapulso(); sda=datobit[6]; esperapulso(); sda=datobit[5]; esperapulso(); sda=datobit[4]; esperapulso(); sda=datobit[3]; esperapulso(); sda=datobit[2]; esperapulso(); sda=datobit[1]; esperapulso(); sda=datobit[0]; esperapulso(); ack=sda; esperaalto(); ack=sda; esperabajo(); //---------------- BIT DE PARADA----------------------------------sda=0; esperaalto(); sda=1; esperabajo(); //--------------- FIN DE LA ESCRITURA---------------------------} void escribirdummy() {

- 61 -

IEL2-I-05-39 IEL2-I-05-41

//------------------- BIT DE INICIO -----------------------------------esperabajo(); sda=1; // Se alista pa la condicion de inicio esperaalto(); sda=0; // Envia condicion de inicio sda = (alto -> bajo) scl = alto esperabajo(); //--- INICIO DE COMUNICACION CON TARJETA MODO ESCRIBIR --sda=1; // Envia primer 1 de la direccion esclava -> 1 esperapulso(); sda=0; // Envia primer 0 -> 0 esperapulso(); sda=1; // Envia segundo 1 -> 1 esperapulso(); sda=0; // Envia segundo 0 -> 0 esperapulso(); sda=0; // 1er Bit de reserva -> 0 esperapulso(); sda=0; // 2do Bit de reserva -> 0 esperapulso(); sda=0; // 3er Bit de reserva -> 0 esperapulso(); sda=0; // ESCRIBIR -> 0 esperapulso(); ack=sda; esperaalto(); ack=sda; // Se recibe acknowledge acknlowledge(); // Analisis de acklowledge esperabajo(); //-------------- DIRECCION EN LA QUE SE VA A ESCRIBIR ---sda=dirbit[7]; esperapulso(); // Direccion 0 Bit 1 sda=dirbit[6]; esperapulso(); // Direccion 0 Bit 2 sda=dirbit[5]; esperapulso(); // Direccion 0 Bit 3 sda=dirbit[4]; esperapulso(); // Direccion 0 Bit 4 sda=dirbit[3]; esperapulso(); // Direccion 0 Bit 5 sda=dirbit[2]; esperapulso(); // Direccion 0 Bit 6 sda=dirbit[1]; esperapulso(); // Direccion 0 Bit 7 sda=dirbit[0]; esperapulso(); // Direccion 0 Bit 8 ack=sda; esperaalto(); ack=sda; esperabajo(); //--------------------------------------------------------------------} //------------------------------------------------------------------------void escribir256() { for (dir=0;dir<230;dir++) { pedirdato(); datoaconvertir=dato;

- 62 -

IEL2-I-05-39 IEL2-I-05-41

diraconvertir=dir; convertirdato(); convertirdir(); escribir(); datobienescrito(); } } //------------------------------------------------------------------------void leer256() { for (dir=0;dir<230;dir++) { diraconvertir=dir; convertirdir(); escribirdummy(); leer(); desconvertir(); enviardato(); } } //------------------------------------------------------------------------void main (void) { while (1) { r=P1_7; if (r==1) { pedirdato(); escriba=dato; putchar(dato); datobienescrito(); pedirdato(); lea=dato; putchar('*'); if(lea==escriba) { putchar('1'); escribir256(); } else { putchar('2'); leer256(); } } } }

- 63 -

IEL2-I-05-39 IEL2-I-05-41

Anexo 2. Programa del microcontrolador Atmel 89C51 en el dispositivo lector portatil


#include <reg52.h> #include <stdio.h> #include <intrins.h> sbit scl =P1^1; //P1.1 es Serial Clock sbit sda =P1^2; //P1.2 es Serial Data sbit P1_3=P1^3; sbit P1_4=P1^4; sbit P1_5=P1^5; sbit P1_6=P1^6; sbit P1_7=P1^7; sbit P2_0=P2^0; sbit P2_1=P2^1; sbit P2_2=P2^2; sbit P2_3=P2^3; sbit P2_4=P2^4; sbit P2_5=P2^5; sbit P2_6=P2^6; sbit P2_7=P2^7; sbit RS = P0^0; // P1.1 es RS sbit RW = P0^1; // P1.2 es RW sbit E = P0^2; // P1.3 es E sbit P3_0=P3^0; sbit P3_1=P3^1; sbit P3_2=P3^2; sbit P3_3=P3^3; sbit P3_4=P3^4; sbit P3_5=P3^5; sbit P3_6=P3^6; sbit P3_7=P3^7; //------------------------------------------------------------------------unsigned char rw,ack,dir,dirbit[8],datobit[8],dato,datoaconvertir,diraconvertir,datorecup,escriba,lea; unsigned char a,d,i,j,k,l,m,n,p,q,r,s,t,temp; //------------------------------------------------------------------------void esperabajo() //Esperar a que scl baje { while (scl==1) {} } //------------------------------------------------------------------------void esperaalto() //Esperar a que scl se ponga en alto { while (scl==0) {} } //------------------------------------------------------------------------void esperapulso() { esperaalto(); //Esperar a que scl suba esperabajo(); //Esperar a que scl baje

- 64 -

IEL2-I-05-39 IEL2-I-05-41

} //------------------------------------------------------------------------void esperavalle() { esperabajo(); //Esperar a que scl baje esperaalto(); //Esperar a que scl suba } //------------------------------------------------------------------------void acknlowledge() { if (ack==1) { putchar('#'); //aqui se debe hecer de nuevo la ultima accion de lectura //P1_7=0; } } //---------------------------------------------------------------------------void desconvertir() { datorecup=datobit[0]+(2*datobit[1])+(4*datobit[2])+(8*datobit[3])+(16*datobit[4])+(32*datobit[5])+(64*dat obit[6])+(128*datobit[7]); } //---------------------------------------------------------------------------void convertirdir() { p=0; while (p!=8) { dirbit[p]=diraconvertir%2; p++; diraconvertir=diraconvertir/2 } /* P2_0=dirbit[0]; P2_1=dirbit[1]; P2_2=dirbit[2]; P2_3=dirbit[3]; P2_4=dirbit[4]; P2_5=dirbit[5]; P2_6=dirbit[6]; P2_7=dirbit[7]; } //------------------------------------------------------------------------------void delay() { E=1; for (s=1;s<154;s++) { a=0; // Delay de 1 mS } E=0; } //------------------------------------------------------------------------------void leer() { //--------------------------------------------------------------------//----------------------- BIT DE INICIO ---------------------------esperabajo(); sda=1; // Se alista pa la condicion de inicio esperaalto();

- 65 -

IEL2-I-05-39 IEL2-I-05-41

sda=0; // Envia condicion de inicio sda = (alto -> bajo) scl = alto esperabajo(); //--------------------------------------------------------------------//---------------------- PROTOCOLO PARA LEER ------------------sda=1; // Envia primer 1 de la direccion esclava -> 1 esperapulso(); sda=0; // Envia primer 0 -> 0 esperapulso(); sda=1; // Envia segundo 1 -> 1 esperapulso(); sda=0; // Envia segundo 0 -> 0 esperapulso(); sda=0; // 1er Bit de reserva -> 0 esperapulso(); sda=0; // 2do Bit de reserva -> 0 esperapulso(); sda=0; // 3er Bit de reserva -> 0 esperapulso(); sda=1; // LEER -> 0 esperapulso(); ack=sda; esperaalto(); ack=sda; // Se recibe acknowledge acknlowledge(); // Analisis de acklowledge esperabajo(); //--------------------------------------------------------------------//------------------- LECTURA DEL DATO ----P1_6=0; esperaalto(); P2_0=sda; // Recibe dato 1 datobit[7]=sda; esperavalle(); P2_1=sda; // Recibe dato 2 datobit[6]=sda; esperavalle(); P2_2=sda; // Recibe dato 3 datobit[5]=sda; esperavalle(); P2_3=sda; // Recibe dato 4 datobit[4]=sda; esperavalle(); P2_4=sda; // Recibe dato 5 datobit[3]=sda; esperavalle(); P2_5=sda; // Recibe dato 6 datobit[2]=sda; esperavalle(); P2_6=sda; // Recibe dato 7 datobit[1]=sda; esperavalle(); P2_7=sda; // Recibe dato 8 datobit[0]=sda; esperabajo(); sda=0; esperapulso(); // La tarjeta lee el acknowledge //---------------------------------------------------------------------//---------------- BIT DE PARADA-----------------------------------

- 66 -

IEL2-I-05-39 IEL2-I-05-41

sda=0; esperaalto(); sda=1; esperabajo(); //-----------------------------------------------------------------//---------------- FIN DE LECTURA-----------------------------------} //-----------------------------------------------------------------------void escribirdummy() { //----------------------------------------------------------------------//------------------- BIT DE INICIO -----------------------------------esperabajo(); sda=1; // Se alista pa la condicion de inicio esperaalto(); sda=0; // Envia condicion de inicio sda = (alto -> bajo) scl = alto esperabajo(); //------------------------------------------------------------------------//--- INICIO DE COMUNICACION CON TARJETA MODO ESCRIBIR --sda=1; // Envia primer 1 de la direccion esclava -> 1 esperapulso(); sda=0; // Envia primer 0 -> 0 esperapulso(); sda=1; // Envia segundo 1 -> 1 esperapulso(); sda=0; // Envia segundo 0 -> 0 esperapulso(); sda=0; // 1er Bit de reserva -> 0 esperapulso(); sda=0; // 2do Bit de reserva -> 0 esperapulso(); sda=0; // 3er Bit de reserva -> 0 esperapulso(); sda=0; // ESCRIBIR -> 0 esperapulso(); ack=sda; esperaalto(); ack=sda; // Se recibe acknowledge acknlowledge(); // Analisis de acklowledge esperabajo(); //--------------------------------------------------------------------//-------------- DIRECCION EN LA QUE SE VA A ESCRIBIR ----sda=dirbit[7]; esperapulso(); // Direccion 0 Bit 1 sda=dirbit[6]; esperapulso(); // Direccion 0 Bit 2 sda=dirbit[5]; esperapulso(); // Direccion 0 Bit 3 sda=dirbit[4]; esperapulso(); // Direccion 0 Bit 4 sda=dirbit[3]; esperapulso(); // Direccion 0 Bit 5 sda=dirbit[2]; esperapulso(); // Direccion 0 Bit 6 sda=dirbit[1]; esperapulso(); // Direccion 0 Bit 7 sda=dirbit[0]; esperapulso(); // Direccion 0 Bit 8

- 67 -

IEL2-I-05-39 IEL2-I-05-41

ack=sda; esperaalto(); ack=sda; esperabajo(); //--------------------------------------------------------------------} //-----------------------------------------------------------------------void leer256() { for (dir=d;dir<d+16;dir++) { diraconvertir=dir; convertirdir(); escribirdummy(); leer(); desconvertir(); if (datorecup=='#') { datorecup=160; } P2=datorecup; delay(); } } //------------------------------------------------------------------------void borrarlcd() { RS=0; RW=0; E=0; P2=1; delay(); } //------------------------------------------------------------------------void escribelcd() { RS=0; RW=0; E=0; P2=56; delay(); P2=15; delay(); P2=6; delay(); RS=1; leer256(); RS=0; P2=192; delay(); RS=1; d=d+16; leer256(); } //------------------------------------------------------------------------------void main (void) {

- 68 -

IEL2-I-05-39 IEL2-I-05-41

d=1; escribelcd(); while (1) { if (P3_6==0||P3_2==0) { d=d+1; if (d==230) {d=1;} borrarlcd(); escribelcd(); } if (P3_3==0||P3_1==0) { d=d-32; if (d==0) {d=230;} borrarlcd(); escribelcd(); }

- 69 -

IEL2-I-05-39 IEL2-I-05-41

Anexo 3. Algoritmo utilizado para desarrollar el software: Sistema de almacenamiento de historial clnico a travs de tarjetas inteligentes
El algoritmo desarrollado para la elaboracin del software que usa nuestro sistema fue programado utilizando el lenguaje de Visual Basic 6. Se recomienda antes de empezar a entender el cdigo de programacin tener ciertas nociones sobre este lenguaje aunque si el lector no las tiene no creo que tenga mayores inconvenientes en entender las principales funciones utilizadas. A continuacin me detendr a explicar nicamente las funciones que consideramos son las ms relevantes dentro del programa, si necesita ms detalle acerca de otras funciones en el apndice puede encontrar el cdigo completo comentado. Empezar por explicar la funcin que se encarga de la comunicacin entre el lector escritor y el computador. En visual el manejo del puerto serial se simplifica mucho si se utiliza el componente Microsoft Comm Control 6.0. Con este componente se puede configurar la manera en que se desea la transmisin de manera sencilla y casi transparente para el usuario. La configuracin utilizada por nosotros es la siguiente. MSComm1.CommPort = 1 'puerto com1 MSComm1.PortOpen = True 'se abre el puerto para que funcione MSComm1.RTSEnable = False MSComm1.RThreshold = 1 MSComm1.Handshaking = 0 MSComm1.Settings = "9600,n,8,1" La comunicacin con el lector escritor requiere de un protocolo muy sencillo desarrollado por nosotros. En este protocolo tanto el proceso de escritura en la tarjeta (igual a grabar en la tarjeta) como el de lectura de la tarjeta requieren que el computador enven y reciba ciertos caracteres de confirmacin, este protocolo funciona como cualquier protocolo de comunicacin donde se pide una confirmacin para seguir enviando o recibiendo datos. Para ser ms claros a continuacin explicaremos estos 2 procesos: Empezaremos por explicar la funcin encargada de Escribir en la Tarjeta, para esta funcin el protocolo exige que enviemos cualesquiera 2 caracteres iguales, en nuestro caso escogimos el carcter @ (arroba). El envi de estos caracteres esta sujeto a que se reciba - 70 -

IEL2-I-05-39 IEL2-I-05-41

una respuesta del dispositivo. Primero se enva el carcter @ y se espera hasta que se reciba los caracteres @* una vez esto ocurre se enva de nuevo el carcter @ pero ahora se espera recibir el carcter @*1 para enviar toda la informacin del historial. De esta manera el dispositivo lector escritor sabe que debe ejecutar la operacin de grabar en la tarjeta, de aqu en adelante enviamos cada carcter y esperamos una condirmacion de recibido para continuar enviando el siguiete carcter.

Para el proceso de lectura de la tarjeta se necesita enviar cualesquiera 2 caracteres distintos. Se enva en nuestro caso el carcter X y se espera la confirmacin de llegada de ese carcter, esta confirmacin esta dada por los caracteres X*. Una vez se ha recibido esta confirmacin se procede a enviar el carcter Y, casi inmediatamente despus se enva este carcter se procede a recibir los datos provenientes del dispositivo lector escritor. El siguiente cdigo muestra como se realizaron este procedimiento en Visual Basic 6. Para la operario de escritura primero se genera un vector (tarray) cuyas 2 primeras posiciones estn compuesta por el carcter @ y las dems posiciones estn compuestas por cada uno de los dems caracteres que representan la informacin del historial clnico (frmprincipal.serial) ''''''''''''''''Escribir en la tarjeta'''''''''''''''''''''''''''' If frmprincipal.OperConLaTarjeta = "Escribir en la tarjeta" Then lblstate.Caption = "Grabando en la tarjeta. Por favor espere" enviar = 0 stmp = "@@" + frmprincipal.serial For i = 1 To Len(stmp) salida = Mid(stmp, i, 1) tarray(i) = salida Next i i=1 MSComm1.Output = tarray(1) End If

Para la operacin de lectura se crea un vector (tarray2) de solo 2 posiciones que contiene los caracteres X y Y, y se enva la primera posicin por serial, el cdigo es el siguiente:

''''''''''''''''''''''''''recibir informacion de la tarjeta'''''''''''''''' If frmprincipal.OperConLaTarjeta = "Leer de la tarjeta" Then lblstate.Caption = "Se esta leyendo de la Tarjeta. Por favor espere" ' el protocolo recomienda enviar 2 caracteres distintos para trasnmision enviar = 1 - 71 -

IEL2-I-05-39 IEL2-I-05-41

tarray2(1) = "x" tarray2(2) = "y" MSComm1.Output = tarray2(1) End If End Sub '''''''''''''''''''''''''''''''''''''''''''''' Para facilitar aun ms el manejo del puerto serial Visual Basic 6 tiene asociado el evento MSComm1_OnComm. Con este evento podemos saber cuando un dato acaba de llegar y de esta manera controlar el envi de un nuevo carcter. Este evento es muy til para el protocolo que deseamos establecer entre nuestro software y el dispositivo lector escritor. El codigo es el siguiente: Private Sub MSComm1_OnComm() If MSComm1.CommEvent = 2 Then 'el 2 indica datos recibidos dato = MSComm1.Input '****************Todo lo concerniente al proceso lectura********************
se espera la llegada del carcter de confirmacion X* If dato = tarray2(1) + "*" And enviar = 1 Then MSComm1.Output = tarray2(2) End If

If frmprincipal.OperConLaTarjeta = "Leer de la tarjeta" Then serial = serial + dato en esta cadena se almacena todo los caracteres que llegan va serial End If ****************Todo lo concerniente al proceso de escritura****************** se espera la llegada del carcter de confirmacin @* If dato = tarray(1) + "*" Then MSComm1.Output = tarray(2) End If se espera la llegada del carcter de confirmacin @*1 If dato = tarray(2) + "*1" Then MSComm1.Output = tarray(3) j=3 End If
de aqu en adelante se envia cada carcter de la cadena y espera una confirmacin de que este carcter ha llegado satisfactoriamente. Esta confirmacin es el carcter enviado mas el carcter *

- 72 -

IEL2-I-05-39 IEL2-I-05-41

If dato = tarray(j) + "*" Then MSComm1.Output = tarray(j + 1) j=j+1 End If If frmprincipal.OperConLaTarjeta = "Escribir en la tarjeta" Then serial2 = serial2 + dato End If If j - Len(stmp) = 1 Then lblstate.Caption = "Operacion Terminada. Gracias" cmdStatus.Caption = "Aceptar" End If If Len(serial) = 235 Then lblstate.Caption = "Operacion Terminada. Gracias" cmdStatus.Caption = "Aceptar" End If End If End Sub

Las funciones relacionadas con el envi y recepcin de archivos en Internet utilizando Visual Basic 6, necesitan del componente Microsoft Internet Transfer Protocol para ejecutarse de manera correcta. Una vez se entiende la manera en que opera este componente es sencillo dar los comando asociados con estos procesos si se desea mas detalle se puede ver en el apndice el codigo completo del programa.
CODIGO COMPLETO DEL PROGRAMA FRMPRINCIPAL Option Explicit Public genero As String, serial As String, myString As String, _ OperacionEnInternet As String, OperConLaTarjeta As String, Operacion_en_el_disco As String, nombredownload As String, NombreUpload As String, _ respuestaSerial As String, error As Integer, concatenar As String, autenticacion As String Private Type registromedi '''''''''''''Informacin personal nombre As String * 31 fechaNacimientomm As String * 2 fechaNacimientodd As String * 2 fechaNacimientoaa As String * 5 sexo As String * 2 Documento As String * 10 tipoDocumento As String * 3 direccion As String * 40 telefono As String * 15 ciudad As String * 15 '''''''''''''Informacin Mdica enfermedades As String * 30 ' enfermedades cronicas AlergiasoReacciones As String * 30 diagnostico As String * 30

- 73 -

IEL2-I-05-39 IEL2-I-05-41

farmacosEnUso As String * 30 procedimientos As String * 30 tipoSangre As String * 2 rh As String * 2 '''''''''''''Informacin histrica 'UltimaActualizacion As String * 1 End Type ''''''''''''''''''''''''''''''''FORM LOAD''''''''''''''''''''''''''''' Private Sub Form_Load() Dim k As Integer Dim myarray2() As String OperacionEnInternet = "" 'mnuAutenticar.Enabled = False 'mnuBurn.Enabled = False 'mnuUpload.Enabled = False error = 0 Option1.Value = False Option2.Value = False cmbTipoDocumento.AddItem "TI", 0 cmbTipoDocumento.AddItem "CC", 1 cmbTipoSangre.AddItem "A", 0 cmbTipoSangre.AddItem "B", 1 cmbTipoSangre.AddItem "AB", 2 cmbTipoSangre.AddItem "O", 3 cmbRh.AddItem "+", 0 cmbRh.AddItem "-", 1 For k = 0 To 11 cmbMM.AddItem k + 1, k Next k For k = 0 To 30 cmbdd.AddItem k + 1, k Next k For k = 0 To 120 cmbaa.AddItem k + 1 + 1900, k Next k If frmconexion.mensaje = 6 Then Dim historial As registromedi Dim i As Integer Dim myArray() As String Open "c:\" & frmprincipal.nombredownload & "WEB" & ".txt" For Random As #1 Len = Len(historial) Get #1, , historial txtNombre.Text = historial.nombre txtDireccion.Text = Trim(historial.direccion) txtTelefono.Text = Trim(historial.telefono) txtCiudad.Text = Trim(historial.ciudad) cmbTipoDocumento.Text = historial.tipoDocumento txtDocumento.Text = Trim(historial.Documento) txtEnfermedades.Text = Trim(historial.enfermedades)

- 74 -

IEL2-I-05-39 IEL2-I-05-41

txtAlergiasoReacciones.Text = Trim(historial.AlergiasoReacciones) txtDiagnostico.Text = Trim(historial.diagnostico) txtFarmacosenuso.Text = Trim(historial.farmacosEnUso) txtProcedimientos.Text = Trim(historial.procedimientos) cmbMM = Trim(historial.fechaNacimientomm) cmbdd = Trim(historial.fechaNacimientodd) cmbaa = Trim(historial.fechaNacimientoaa) cmbTipoSangre.Text = Trim(historial.tipoSangre) cmbRh.Text = Trim(historial.rh) If historial.sexo = 0 Then Option1.Value = True Else Option2.Value = True txtNombre.Enabled = False cmbMM.Enabled = False cmbaa.Enabled = False cmbdd.Enabled = False cmbTipoSangre.Enabled = False cmbRh.Enabled = False txtDocumento.Enabled = False cmbTipoDocumento.Enabled = False txtDireccion.Enabled = False txtTelefono.Enabled = False txtCiudad.Enabled = False txtEnfermedades.Enabled = False txtAlergiasoReacciones.Enabled = False txtDiagnostico.Enabled = False txtFarmacosenuso.Enabled = False txtProcedimientos.Enabled = False ' option para Sexo Option1.Enabled = False Option2.Enabled = False Close #1 End If End Sub ''''''''''''''''''''OPERACIONES REALCIONADAS CON LA LECTURA Y ESCRITURA DE ARCHIVOS''''''''' ''''''''''''''''''''''''''''''''DESDE EL DISCO'''''''''''''''''' '''''''NUEVO HISTORIAL Private Function Nuevo_historial() Operacion_en_el_disco = "nuevo historial" cmbMM.Text = 1 cmbdd.Text = 1 cmbaa.Text = 1901 Option1.Value = False ' para sexo Option2.Value = False ' para sexo txtNombre.Text = "" txtDocumento.Text = "" txtDireccion.Text = "" txtTelefono.Text = "" txtCiudad.Text = ""

- 75 -

IEL2-I-05-39 IEL2-I-05-41

txtEnfermedades.Text = "" txtAlergiasoReacciones.Text = "" txtDiagnostico.Text = "" txtFarmacosenuso.Text = "" txtProcedimientos.Text = "" able_textbox ' llamado de funcin End Function ''''''''''''''''''''''''''''''''''' LEER DEL DISCO''''''''''''''''' Private Function leer_de_disco() Operacion_en_el_disco = "leer del disco" Dim historial As registromedi Dim i As Integer 'Dim myString As String Dim myArray() As String CD1.Filter = "tipo mdico |*.txt" CD1.ShowOpen If Not CD1.FileName = "" Then Open CD1.FileName For Random As #1 Len = Len(historial) Get #1, , historial txtNombre.Text = CoDecodeXOR(Trim(historial.nombre)) txtDireccion.Text = CoDecodeXOR(Trim(historial.direccion)) txtTelefono.Text = CoDecodeXOR(Trim(historial.telefono)) txtCiudad.Text = CoDecodeXOR(Trim(historial.ciudad)) cmbTipoDocumento.Text = CoDecodeXOR(historial.tipoDocumento) txtDocumento.Text = CoDecodeXOR(Trim(historial.Documento)) txtEnfermedades.Text = CoDecodeXOR(Trim(historial.enfermedades)) txtAlergiasoReacciones.Text = CoDecodeXOR(Trim(historial.AlergiasoReacciones)) txtDiagnostico.Text = CoDecodeXOR(Trim(historial.diagnostico)) txtFarmacosenuso.Text = CoDecodeXOR(Trim(historial.farmacosEnUso)) txtProcedimientos.Text = CoDecodeXOR(Trim(historial.procedimientos)) cmbMM = CoDecodeXOR(Trim(historial.fechaNacimientomm)) cmbdd = CoDecodeXOR(Trim(historial.fechaNacimientodd)) cmbaa = CoDecodeXOR(Trim(historial.fechaNacimientoaa)) cmbTipoSangre.Text = Trim(historial.tipoSangre) cmbRh.Text = Trim(historial.rh) If historial.sexo = 0 Then Option1.Value = True Else Option2.Value = True txtNombre.Enabled = False cmbMM.Enabled = False cmbaa.Enabled = False cmbdd.Enabled = False cmbTipoSangre.Enabled = False cmbRh.Enabled = False txtDocumento.Enabled = False cmbTipoDocumento.Enabled = False txtDireccion.Enabled = False txtTelefono.Enabled = False txtCiudad.Enabled = False txtEnfermedades.Enabled = False txtAlergiasoReacciones.Enabled = False

- 76 -

IEL2-I-05-39 IEL2-I-05-41

txtDiagnostico.Enabled = False txtFarmacosenuso.Enabled = False txtProcedimientos.Enabled = False '' option para Sexo Option1.Enabled = False Option2.Enabled = False 'mnuAutenticar.Enabled = False Close #1 End If End Function '''''''''''''''''''''''''''''GUARDAR EN DISCO'''''''''''''''''''''' Private Function guardar_en_disco() Dim historial As registromedi Operacion_en_el_disco = "Guardar en disco" deteccion_errores_2 If error = 0 Then historial.nombre = CoDecodeXOR(Trim(txtNombre.Text)) historial.sexo = genero historial.fechaNacimientomm = CoDecodeXOR(Trim(cmbMM.Text)) historial.fechaNacimientodd = CoDecodeXOR(Trim(cmbdd.Text)) historial.fechaNacimientoaa = CoDecodeXOR(Trim(cmbaa.Text)) historial.Documento = CoDecodeXOR(Trim(txtDocumento.Text)) historial.tipoDocumento = CoDecodeXOR(cmbTipoDocumento.Text) historial.direccion = CoDecodeXOR(Trim(txtDireccion.Text)) historial.telefono = CoDecodeXOR(Trim(txtTelefono.Text)) historial.ciudad = CoDecodeXOR(Trim(txtCiudad.Text)) historial.AlergiasoReacciones = CoDecodeXOR(Trim(txtAlergiasoReacciones.Text)) historial.diagnostico = CoDecodeXOR(Trim(txtDiagnostico.Text)) historial.farmacosEnUso = CoDecodeXOR(Trim(txtFarmacosenuso.Text)) historial.enfermedades = CoDecodeXOR(Trim(txtEnfermedades.Text)) historial.procedimientos = CoDecodeXOR(Trim(txtProcedimientos.Text)) historial.tipoSangre = cmbTipoSangre.Text historial.rh = cmbRh.Text

CD1.Filter = "tipo mdico (*.txt)|*.txt" CD1.ShowSave If Not CD1.FileName = "" Then Open CD1.FileName For Random As #1 Len = Len(historial) ' se almacena tipo Random Put #1, , historial Close #1 End If End If End Function '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''OPERACIONES EN INTERNET: BAJAR Y SUBIR ARCHIVOS'''''' ''''''''''''''''BAJAR ARCHIVOS DE INTERNET'''''''''''''''''

- 77 -

IEL2-I-05-39 IEL2-I-05-41

Private Function Bajar_archivo_Internet() nombredownload = InputBox("Por favor Escriba la cedula del historial que desea descargar: ") OperacionEnInternet = "bajar archivo" Unload Me frmconexion.Show End Function ''''''''''''''''''''''SUBIR ARCHIVOS A INTERNET''''''''''''''''''''''' Private Function Subir_historial_Internet() OperacionEnInternet = "subir historial" encriptacion_AES End Function '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Sub Option1_Click() genero = "0" End Sub Private Sub Option2_Click() genero = "1" End Sub '''Leer historial almacenado en la Tarjeta Public Function Leer_historial_tarjeta() Dim myarray2() As String If Not frmserial.k = 1 Then OperConLaTarjeta = "Leer de la tarjeta" frmserial.Show Else If respuestaSerial = "listo" Then myarray2 = Split(frmserial.serial, "#") 'El siguiente paso es tomar cada posicion del vector myarray2 y asignarle la casilla que le corresponde 'txtprueba.Text = Len(frmserial.serial) On Error GoTo rutina txtNombre.Text = CoDecodeXOR(myarray2(1)) cmbMM.Text = CoDecodeXOR(myarray2(2)) cmbdd.Text = CoDecodeXOR(myarray2(3)) cmbaa.Text = CoDecodeXOR(myarray2(4)) If myarray2(5) = 0 Then Option1.Value = True Else Option2.Value = True txtDocumento.Text = CoDecodeXOR(myarray2(6)) cmbTipoDocumento.Text = CoDecodeXOR(myarray2(7)) txtDireccion.Text = CoDecodeXOR(myarray2(8)) txtTelefono.Text = CoDecodeXOR(myarray2(9)) txtCiudad.Text = CoDecodeXOR(myarray2(10)) txtEnfermedades.Text = CoDecodeXOR(myarray2(11)) txtAlergiasoReacciones.Text = CoDecodeXOR(myarray2(12)) txtDiagnostico.Text = CoDecodeXOR(myarray2(13)) txtFarmacosenuso.Text = CoDecodeXOR(myarray2(14)) txtProcedimientos.Text = CoDecodeXOR(myarray2(15)) txtNombre.Enabled = False cmbMM.Enabled = False cmbaa.Enabled = False cmbdd.Enabled = False cmbTipoSangre.Enabled = False

- 78 -

IEL2-I-05-39 IEL2-I-05-41

cmbRh.Enabled = False txtDocumento.Enabled = False cmbTipoDocumento.Enabled = False txtDireccion.Enabled = False txtTelefono.Enabled = False txtCiudad.Enabled = False txtEnfermedades.Enabled = False txtAlergiasoReacciones.Enabled = False txtDiagnostico.Enabled = False txtFarmacosenuso.Enabled = False txtProcedimientos.Enabled = False 'option para Sexo Option1.Enabled = False Option2.Enabled = False mnuAutenticar.Enabled = True respuestaSerial = "En espera" frmserial.k = 0 End If rutina: If Err.Number = 9 Then Dim respuesta respuesta = MsgBox("Por favor debe apagar y prender el dispositivo para iniciar la lectura") frmserial.k = 0 End If End If End Function ''''''''''''''''''''''''''''''''''''''''''''MENU'''''''''''''''''''''''''''''''''''''' Private Sub mnuAutenticar_Click() encriptacion_AES End Sub Private Sub mnuNew_Click() Nuevo_historial End Sub Private Sub mnuDrive_Click() leer_de_disco End Sub Private Sub mnuSave_Click() guardar_en_disco End Sub Private Sub mnudownload_Click() Bajar_archivo_Internet End Sub Private Sub mnuUpload_Click() Subir_historial_Internet End Sub Private Sub mnuBurn_Click() Actualizar_historial_Tarjeta

- 79 -

IEL2-I-05-39 IEL2-I-05-41

End Sub Private Sub mnuCard_Click() Leer_historial_tarjeta End Sub Private Sub mnuImprimir_Click() PrintForm End Sub Private Sub mnuAbout_Click() Frmabout.Show End Sub Private Sub mnuexit_Click() End End Sub

'''''''''''''''''BARRA DE HERRAMIENTAS''''''''''''''''''''''''''' Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) If Button.Index = 1 Then ' NUEVO HISTORIAL Nuevo_historial End If If Button.Index = 2 Then ' GUARDAR EN DISCO guardar_en_disco End If If Button.Index = 3 Then ' LEER DE DISCO leer_de_disco End If If Button.Index = 4 Then ' IMPRIMIR PrintForm End If If Button.Index = 5 Then ' GRABAR TARJETA If autenticacion = "usuario autenticado" Then Actualizar_historial_Tarjeta OperConLaTarjeta = "escribir tarjeta" Else Dim BOX BOX = MsgBox("PARA REALIZAR ESTA OPERACIN TIENE QUE ESTAR AUTENTICADO PRIMERO", vbExclamation) End If End If If Button.Index = 6 Then ' LEER DE TARJETA Leer_historial_tarjeta End If If Button.Index = 7 Then ' ACTUALZIAR HISTORIAL EN INTERNET Subir_historial_Internet End If

- 80 -

IEL2-I-05-39 IEL2-I-05-41

If Button.Index = 8 Then ' BAJAR ARCHIVO DE INTERNET Bajar_archivo_Internet End If If Button.Index = 9 Then 'AYUDA Frmabout.Show End If End Sub '''''''''''''''''''''''''''''''''''''''''ERRORES ''''''''''''''''''''''''''''''''' Private Sub cmbaa_Change() deteccion_error_escritura End Sub Private Sub cmbdd_Change() deteccion_error_escritura End Sub Private Sub cmbMM_Change() deteccion_error_escritura End Sub Private Sub cmbTipoDocumento_Change() deteccion_error_escritura End Sub Private Sub cmbRh_Change() If Not Operacion_en_el_disco = "leer del disco" Then deteccion_error_escritura End If End Sub Private Sub cmbTipoSangre_Change() If Not Operacion_en_el_disco = "leer del disco" Then deteccion_error_escritura End If End Sub '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Function deteccion_error_escritura() If cmbMM.Text = "" Then cmbMM.Text = 1 If cmbMM.Text = "01" Then cmbMM.Text = 1 If cmbMM.Text = "02" Then cmbMM.Text = 2 If cmbMM.Text = "03" Then cmbMM.Text = 3 If cmbMM.Text = "04" Then cmbMM.Text = 4 If cmbMM.Text = "05" Then cmbMM.Text = 5 If cmbMM.Text = "06" Then cmbMM.Text = 6 If cmbMM.Text = "07" Then cmbMM.Text = 7 If cmbMM.Text = "08" Then cmbMM.Text = 8 If cmbMM.Text = "09" Then cmbMM.Text = 9 If cmbdd.Text = "" Then cmbdd.Text = 1 If cmbdd.Text = "01" Then cmbdd.Text = 1 If cmbdd.Text = "02" Then cmbdd.Text = 2

- 81 -

IEL2-I-05-39 IEL2-I-05-41

If cmbdd.Text = "03" Then cmbdd.Text = 3 If cmbdd.Text = "04" Then cmbdd.Text = 4 If cmbdd.Text = "05" Then cmbdd.Text = 5 If cmbdd.Text = "06" Then cmbdd.Text = 6 If cmbdd.Text = "07" Then cmbdd.Text = 7 If cmbdd.Text = "08" Then cmbdd.Text = 8 If cmbdd.Text = "09" Then cmbdd.Text = 9 If cmbTipoDocumento.Text = "" Then cmbTipoDocumento.Text = "CC" If cmbTipoDocumento.Text = "c" Then cmbTipoDocumento.Text = "C" If cmbTipoDocumento.Text = "t" Then cmbTipoDocumento.Text = "T" If cmbTipoDocumento.Text = "i" Then cmbTipoDocumento.Text = "I" If cmbTipoSangre.Text = "" Then cmbTipoSangre = "O" If cmbTipoSangre = "o" Then cmbTipoSangre = "O" If cmbTipoSangre = "a" Then cmbTipoSangre = "A" If cmbTipoSangre = "b" Then cmbTipoSangre = "B"

If cmbRh.Text = "" Then cmbRh = "+" ' Se encarga de mirar posibles errores en la escritura If Not (Operacion_en_el_disco = "leer del disco" Or Operacion_en_el_disco = "nuevo historial") Then caracter_no_valido (cmbdd.Text) caracter_no_valido (cmbMM.Text) caracter_no_valido (cmbaa.Text) Dim i As Integer Dim error Dim salida For i = 1 To Len(cmbTipoSangre.Text) salida = Mid(cmbTipoSangre.Text, i, 1) If Not (salida = "A" Or salida = "O" Or salida = "B") Then 'no es un numero error = MsgBox("Caracter no valido para Tipo Sangre. Favor corregir", vbExclamation) cmbTipoSangre.Text = "O" End If Next i End If '''''''''' If Len(cmbMM.Text) = 2 Then If Not (cmbMM.Text = "1" Or cmbMM.Text = "2" Or cmbMM.Text = "3" Or cmbMM.Text = "4" Or cmbMM.Text = "5" Or cmbMM.Text = "6" Or _ cmbMM.Text = "7" Or cmbMM.Text = "8" Or cmbMM.Text = "9" Or cmbMM.Text = "10" Or cmbMM.Text = "11" Or cmbMM.Text = "12") Then error = MsgBox("Caracter no valido para mes. Favor corregir", vbExclamation) cmbMM.Text = 1 End If End If If Len(cmbdd.Text) = 2 Then If Not (cmbdd.Text = "1" Or cmbdd.Text = "2" Or cmbdd.Text = "3" Or cmbdd.Text = "4" Or cmbdd.Text = "5" Or cmbdd.Text = "6" Or _ cmbdd.Text = "7" Or cmbdd.Text = "8" Or cmbdd.Text = "9" Or cmbdd.Text = "10" Or cmbdd.Text = "11" Or cmbdd.Text = "12" Or cmbdd.Text = "13" Or cmbdd.Text = "14" Or cmbdd.Text = "15" Or cmbdd.Text = "16" Or cmbdd.Text = "17" Or cmbdd.Text = "18" Or _ cmbdd.Text = "19" Or cmbdd.Text = "20" Or cmbdd.Text = "21" Or cmbdd.Text = "22" Or cmbdd.Text = "23" Or cmbdd.Text = "24" Or cmbdd.Text = "25" Or cmbdd.Text = "26" Or cmbdd.Text = "27" Or cmbdd.Text = "28" Or cmbdd.Text = "29" Or cmbdd.Text = "30" Or _

- 82 -

IEL2-I-05-39 IEL2-I-05-41

cmbdd.Text = "31") Then error = MsgBox("Caracter no valido para dia. Favor corregir", vbExclamation) cmbdd.Text = 1 End If End If

If Len(cmbaa.Text) = 4 Then If cmbaa.Text < 1901 Or cmbaa.Text > 2021 Then error = MsgBox("El ao se encuentra por fuera del rango. Favor corregir", vbExclamation) cmbaa.Text = 1901 End If End If

If Len(cmbTipoSangre.Text) = 2 Then If Not (cmbTipoSangre.Text = "O" Or cmbTipoSangre.Text = "A" Or cmbTipoSangre.Text = "AB" Or cmbTipoSangre.Text = "B") Then error = MsgBox("Caracter no valido para tipo sangre. Favor corregir", vbExclamation) cmbMM.Text = 1 End If End If

If Len(cmbRh.Text) = 2 Then If Not (cmbRh.Text = "+" Or cmbRh.Text = "-") Then error = MsgBox("Caracter no valido para Rh. Favor corregir", vbExclamation) cmbMM.Text = 1 End If End If

End Function Private Function deteccion_errores_2() error = 0 If cmbMM.Text = 2 Then If cmbdd.Text > 29 Then error = MsgBox("Febrero tiene mximo 29 dias. Favor corregir", vbExclamation) Else error = 0 End If

If cmbMM = 4 Or cmbMM = 6 Or cmbMM = 9 Or cmbMM = 10 Or cmbMM = 11 Then If cmbdd.Text > 30 Then error = MsgBox("EL mes escogido posee max. 30 dias. Favor corregir", vbExclamation) Else error = 0 End If End Function Private Function caracter_no_valido(cadena As String) Dim salida As String Dim i As Integer For i = 1 To Len(cadena) salida = Mid(cadena, i, 1) If Asc(salida) < 48 Or Asc(salida) > 57 Then 'no es un numero error = MsgBox("Caracter no valido para ao. Favor corregir", vbExclamation) cadena = 1901

- 83 -

IEL2-I-05-39 IEL2-I-05-41

End If Next i End Function Private Function caracter_no_valido2(cadena As String) Dim salida As String Dim vector(0 To 2) As String Dim i As Integer For i = 1 To Len(cadena) salida = Mid(cadena, i, 1) vector(i) = salida If i = 1 Then If Not (salida = "C" Or salida = "T" Or salida = "c" Or salida = "t") Then error = MsgBox("Caracter no valido para ao. Favor corregir", vbExclamation) End If End If If i = 2 Then If Not (salida = "C" Or salida = "I" Or salida = "c" Or salida = "i") Then error = MsgBox("Caracter no valido para ao. Favor corregir", vbExclamation) End If End If Next i End Function

Public Function encriptacion_AES() ' busca guardar un archivo encriptado con AES Dim sTemp As String, sPassword As String If Not frmClave.i = 1 Then frmClave.Show Else concatenar = "" concatenar = "#" + txtNombre.Text + "#" + cmbMM.Text + "#" + cmbdd.Text + "#" + cmbaa.Text + "#" + genero + "#" + txtDocumento.Text + "#" + cmbTipoDocumento.Text + "#" + txtDireccion.Text + "#" + txtTelefono.Text + "#" _ + txtCiudad.Text + "#" + txtEnfermedades.Text + "#" + txtAlergiasoReacciones.Text + "#" + txtDiagnostico.Text + "#" + txtFarmacosenuso.Text + "#" + txtProcedimientos.Text + "#" '+ frmprincipal.txtActualizacion.Text + "#" + "basura" + "#" + "basura" + "#" sPassword = frmClave.clave 'sPassword = InputBox("Key", "Encrypt") If StrPtr(sPassword) = 0 Then Exit Function concatenar = strEncrypt(concatenar, sPassword) Open "c:\" & txtDocumento.Text & "AES" & ".txt" For Output As #1 Print #1, Str2Hex(concatenar) Close #1

If OperacionEnInternet = "subir historial" Then Dim historial As registromedi historial.nombre = Trim(txtNombre.Text) historial.sexo = genero historial.fechaNacimientomm = Trim(cmbMM.Text) historial.fechaNacimientodd = Trim(cmbdd.Text)

- 84 -

IEL2-I-05-39 IEL2-I-05-41

historial.fechaNacimientoaa = Trim(cmbaa.Text) historial.Documento = Trim(txtDocumento.Text) historial.tipoDocumento = cmbTipoDocumento.Text historial.direccion = Trim(txtDireccion.Text) historial.telefono = Trim(txtTelefono.Text) historial.ciudad = Trim(txtCiudad.Text) historial.AlergiasoReacciones = Trim(txtAlergiasoReacciones.Text) historial.diagnostico = Trim(txtDiagnostico.Text) historial.farmacosEnUso = Trim(txtFarmacosenuso.Text) historial.enfermedades = Trim(txtEnfermedades.Text) historial.procedimientos = Trim(txtProcedimientos.Text) historial.tipoSangre = cmbTipoSangre.Text historial.rh = cmbRh.Text Open "c:\" & txtDocumento.Text & "WEB" & ".txt" For Random As #1 Len = Len(historial) ' se almacena tipo Random Put #1, , historial Close #1 frmconexion.Show frmClave.i = 0 Else autenticacion_AES_final frmClave.i = 0 End If End If End Function

''''''Esta funcion se encarga de compara los 2 archivos con encriptacion AES... ''''si son iguales autoriza la operacion Public Function autenticacion_AES_final() Open "c:\" & "cedula" & ".txt" For Output As #1 ' se almacena tipo Random Print #1, , "basura" Close #1 Kill "c:\" + "cedula" & ".txt" With Inet1 .URL = "ftp://ftp.usuarios.lycos.es/conclave/" .UserName = "historialcolombia" .Password = "2176fmsh" Inet1.Execute , "GET" & " " & "/conclave/" & txtDocumento.Text & "AES" & ".txt" & _ " " & "c:\" & "cedula" & ".txt" End With Do While Inet1.StillExecuting = True DoEvents Loop Dim temporal As String Dim temporal2 As String Open "c:\" & "cedula" & ".txt" For Input As #1 Input #1, temporal

- 85 -

IEL2-I-05-39 IEL2-I-05-41

Close #1 Open "c:\" & txtDocumento.Text & "AES" & ".txt" For Input As #1 Input #1, temporal2 Close #1

If temporal = temporal2 And Not temporal = "" Then txtprueba.Text = "listerines" able_textbox mnuBurn.Enabled = True 'mnuAutenticar = False mnuUpload.Enabled = True autenticacion = "usuario autenticado" MsgBox (autenticacion) Else autenticacion = "usuario no autenticado" MsgBox (autenticacion) End If End Function Private Sub Inet1_StateChanged(ByVal State As Integer) Dim vtData As Variant ' Data variable. ' para el msgbox cuando se ha terminado la operacion Dim error As Integer ' para el msgbox en caso de error Select Case State Case 0 lstate.Caption = "0 - Sin actividad" 'Lstate es un Label donde presentamos el estado de la conexin Case 1 lstate = "1 - Buscando Host" Case 2 lstate = "2 - Host encontrado" Case 3 lstate = "3 - Conectando" Case 4 lstate = "4 - Conectado" Case 5 lstate = "5 - Enviando solicitud" Case 6 lstate = "6 - Solicitud enviada" Case 7 lstate = "7 - Recibiendo respuesta del Host" Case 8 lstate = "8 - Respuesta recibida" Case 9 lstate = "9 - Desconectando" Case 10 lstate = "10 - Desconectado" Case 11 lstate = "11 - Error de conexin" error = MsgBox("Error en la conexion", vbRetryCancel, vbCritical)

- 86 -

IEL2-I-05-39 IEL2-I-05-41

If error = 4 Then ' retry Unload Me frmprincipal.Show End If If error = 2 Then ' Cancelar Unload Me frmprincipal.Show End If Case 12 lstate = "12 - Operacin completada" ''''' la siguiente parte se encarga de traer por partes el archivo que se ha bajado de Internet '''''PUEDE NO SERVIR DE MUCHO VER SI SE PUEDE OMITIR DEL CODIGO Dim strData As String, bDone As Boolean, F As Integer 'Obtiene el primer bloque. vtData = Inet1.GetChunk(1024, icString) DoEvents Do While Not bDone strData = strData & vtData DoEvents ' Obtiene el bloque siguiente. Est sacando bloques de 1024 caracteres 'hasta que no queda ninguno. En ese caso, GetChunk devuelve la cadena vaca vtData = Inet1.GetChunk(1024, icString) If Len(vtData) = 0 Then bDone = True End If Loop Do While Inet1.StillExecuting = True DoEvents Loop '''''''''''''SE ENCARGA DE MOSTRAR QUE LA OPERACION HA TERMINADO If frmprincipal.OperacionEnInternet = "subir historial" Then Dim mensaje mensaje = MsgBox("Operacion Completada", vbInformation) If mensaje = 1 Then Unload Me frmprincipal.Show End If End If If frmprincipal.OperacionEnInternet = "bajar archivo" Then mensaje = MsgBox("Desea abrir el archivo", vbYesNo) If mensaje = 6 Then ' yes Unload Me frmprincipal.Show End If If mensaje = 7 Then ' no Unload Me frmprincipal.Show End If End If End Select

- 87 -

IEL2-I-05-39 IEL2-I-05-41

End Sub

FORMA PARA LA COMUNICACIN SERIAL: FRMSERIAL Option Explicit Public CommPort As String, Handshaking As String, Settings As String, i As Integer, j As Integer, enviar As Integer, _ dato As String, serial As String, serial2 As String, stmp As String, k As Integer Private tarray(0 To 250) As String, tarray2(0 To 2) Private Sub Form_Load() k=0 Dim salida As String Dim buferentrada As String serial = "" MSComm1.CommPort = 2

'puerto com1

MSComm1.PortOpen = True 'se abre el puerto para que funcione MSComm1.RTSEnable = False MSComm1.RThreshold = 1 MSComm1.Handshaking = 0 MSComm1.Settings = "9600,n,8,1" '''''''''''''''''Escribir en la tarjeta'''''''''''''''''''''''''''' If frmprincipal.OperConLaTarjeta = "Escribir en la tarjeta" Then lblstate.Caption = "Grabando en la tarjeta. Por favor espere" enviar = 0 stmp = "@@" + frmprincipal.serial For i = 1 To Len(stmp) salida = Mid(stmp, i, 1) tarray(i) = salida Next i i=1 MSComm1.Output = tarray(1) End If ''''''''''''''''''''''''''recibir informacion de la tarjeta'''''''''''''''' If frmprincipal.OperConLaTarjeta = "Leer de la tarjeta" Then lblstate.Caption = "Se esta leyendo de la Tarjeta. Por favor espere" ' el protocolo recomienda enviar 2 caracteres distintos para trasnmision enviar = 1 tarray2(1) = "x" tarray2(2) = "y" MSComm1.Output = tarray2(1) End If End Sub ''''''''''''''''''''''''''''''''''''''''''''''

- 88 -

IEL2-I-05-39 IEL2-I-05-41

Private Sub MSComm1_OnComm() If MSComm1.CommEvent = 2 Then 'el 2 indica datos recibidos dato = MSComm1.Input '****************Todo lo concerniente al proceso de lectura************************ If dato = tarray2(1) + "*" And enviar = 1 Then MSComm1.Output = tarray2(2) End If If frmprincipal.OperConLaTarjeta = "Leer de la tarjeta" Then serial = serial + dato End If '****************Todo lo concerniente al proceso de escritura********************* If dato = tarray(1) + "*" Then MSComm1.Output = tarray(2) End If If dato = tarray(2) + "*1" Then MSComm1.Output = tarray(3) j = 3 ' donde i=3 End If If dato = tarray(j) + "*" Then MSComm1.Output = tarray(j + 1) j=j+1 End If If frmprincipal.OperConLaTarjeta = "Escribir en la tarjeta" Then serial2 = serial2 + dato End If If j - Len(stmp) = 1 Then lblstate.Caption = "Operacion Terminada. Gracias" cmdStatus.Caption = "Aceptar" End If If Len(serial) = 235 Then lblstate.Caption = "Operacion Terminada. Gracias" cmdStatus.Caption = "Aceptar" End If End If End Sub Private Sub cmdStatus_Click() If frmprincipal.OperConLaTarjeta = "Leer de la tarjeta" Then MSComm1.PortOpen = False frmprincipal.respuestaSerial = "listo" k=1 Unload Me frmprincipal.Leer_historial_tarjeta frmprincipal.Show End If

- 89 -

IEL2-I-05-39 IEL2-I-05-41

If frmprincipal.OperConLaTarjeta = "Escribir en la tarjeta" Then MSComm1.PortOpen = False Unload Me frmprincipal.Show End If End Sub

FORMA PARA LA COMUNICACIN EN INTERNET: FRMCONEXION Option Explicit Public dfile As String, Dfile2 As String, mensaje As Integer Private Sub Form_Load() Dim sfile As String Dim sfile2 As String On Error GoTo rutina If frmprincipal.OperacionEnInternet = "subir historial" Then frmconexion.Caption = "SUBIR HISTORIAL" sfile = "c:\" & frmprincipal.txtDocumento.Text & "AES" & ".txt" sfile2 = "/conclave/" + Trim(frmprincipal.txtDocumento.Text) + "AES" + ".txt" ' falta cambiar al pelo por un nombre mas conveniente With Inet1 .URL = "ftp://ftp.usuarios.lycos.es/conclave/" .UserName = "historialcolombia" .Password = "2176fmsh" Inet1.Execute , "PUT" & " " & sfile & _ " " & sfile2 Do While Inet1.StillExecuting = True DoEvents Loop Inet1.Execute , "PUT" & " " & "c:\" & frmprincipal.txtDocumento.Text & "WEB" & ".txt" & _ " " & "/conclave/" + frmprincipal.txtDocumento.Text & "WEB" & ".txt" End With frmprincipal.OperacionEnInternet = "" End If If frmprincipal.OperacionEnInternet = "bajar archivo" Then frmconexion.Caption = "BAJAR HISTORIAL" Open "c:\" & frmprincipal.nombredownload & "WEB" & ".txt" For Random As #1 ' se almacena tipo Random Put #1, , "basura" Close #1 Kill "c:\" + frmprincipal.nombredownload & "WEB" & ".txt" With Inet1 .URL = "ftp://ftp.usuarios.lycos.es/conclave/" .UserName = "historialcolombia" '"ra-romer" .Password = "2176fmsh" ' "Cancelar1"

- 90 -

IEL2-I-05-39 IEL2-I-05-41

Inet1.Execute , "GET" & " " & "/conclave/" & frmprincipal.nombredownload & "WEB" & ".txt" & _ " " & "c:\" & frmprincipal.nombredownload & "WEB" & ".txt" End With End If rutina: If Err.Number = 35754 Then MsgBox ("No es posible conectarse al host. Verifique su conexion a internet") Unload Me End If End Sub Private Sub Inet1_StateChanged(ByVal State As Integer) Dim vtData As Variant ' Data variable. ' para el msgbox cuando se ha terminado la operacion Dim error As Integer ' para el msgbox en caso de error Select Case State Case 0 lstate.Caption = "0 - Sin actividad" conexin Case 1 lstate = "1 - Buscando Host" Case 2 lstate = "2 - Host encontrado" Case 3 lstate = "3 - Conectando" Case 4 lstate = "4 - Conectado" Case 5 lstate = "5 - Enviando solicitud" Case 6 lstate = "6 - Solicitud enviada" Case 7 lstate = "7 - Recibiendo respuesta del Host" Case 8 lstate = "8 - Respuesta recibida" Case 9 lstate = "9 - Desconectando" Case 10 lstate = "10 - Desconectado" Case 11 lstate = "11 - Error de conexin" error = MsgBox("Error en la conexion", vbRetryCancel, vbCritical) If error = 4 Then ' retry Unload Me frmprincipal.Show End If If error = 2 Then ' Cancelar Unload Me frmprincipal.Show

'Lstate es un Label donde presentamos el estado de la

- 91 -

IEL2-I-05-39 IEL2-I-05-41

End If Case 12 lstate = "12 - Operacin completada" ''''' la siguiente parte se encarga de traer por partes el archivo que se ha bajado de Internet '''''PUEDE NO SERVIR DE MUCHO VER SI SE PUEDE OMITIR DEL CODIGO Dim strData As String, bDone As Boolean, F As Integer 'Obtiene el primer bloque. vtData = Inet1.GetChunk(1024, icString) DoEvents Do While Not bDone strData = strData & vtData DoEvents ' Obtiene el bloque siguiente. Est sacando bloques de 1024 caracteres 'hasta que no queda ninguno. En ese caso, GetChunk devuelve la cadena vaca vtData = Inet1.GetChunk(1024, icString) If Len(vtData) = 0 Then bDone = True End If Loop Do While Inet1.StillExecuting = True DoEvents Loop '''''''''''''SE ENCARGA DE MOSTRAR QUE LA OPERACION HA TERMINADO If frmprincipal.OperacionEnInternet = "subir historial" Then mensaje = MsgBox("Operacion Completada", vbInformation) If mensaje = 1 Then Unload Me frmprincipal.Show End If End If If frmprincipal.OperacionEnInternet = "bajar archivo" Then mensaje = MsgBox("Desea abrir el archivo", vbYesNo) If mensaje = 6 Then ' yes Unload Me frmprincipal.Show End If If mensaje = 7 Then ' no Unload Me frmprincipal.Show End If End If End Select End Sub

Private Sub Command1_Click() Unload Me frmprincipal.Show End Sub

MODULO DE LAS PRINCIPALES FUNCIONES

- 92 -

IEL2-I-05-39 IEL2-I-05-41

Public Function Actualizar_historial_Tarjeta() Dim i As Integer Dim myArray() As String ' frmprincipal.txtActualizacion.Text = Date frmprincipal.OperConLaTarjeta = "Escribir en la tarjeta" ' El siguiente procedimiento sirve para dejar listo la cadena a enviar de manera serial frmprincipal.serial = "#" + Trim(CoDecodeXOR(frmprincipal.txtNombre.Text)) + "#" + Trim(CoDecodeXOR(frmprincipal.cmbMM.Text)) + "#" + Trim(CoDecodeXOR(frmprincipal.cmbdd.Text)) + "#" + Trim(CoDecodeXOR(frmprincipal.cmbaa.Text)) + "#" + frmprincipal.genero + "#" + Trim(CoDecodeXOR(frmprincipal.txtDocumento.Text)) + "#" + CoDecodeXOR(frmprincipal.cmbTipoDocumento.Text) + "#" + Trim(CoDecodeXOR(frmprincipal.txtDireccion.Text)) + "#" + Trim(CoDecodeXOR(frmprincipal.txtTelefono.Text)) + "#" _ + Trim(CoDecodeXOR(frmprincipal.txtCiudad.Text)) + "#" + Trim(CoDecodeXOR(frmprincipal.txtEnfermedades.Text)) + "#" + Trim(CoDecodeXOR(frmprincipal.txtAlergiasoReacciones.Text)) + "#" + Trim(CoDecodeXOR(frmprincipal.txtDiagnostico.Text)) + "#" + Trim(CoDecodeXOR(frmprincipal.txtFarmacosenuso.Text)) + "#" + Trim(CoDecodeXOR(frmprincipal.txtProcedimientos.Text)) + "#" ' + Trim(CoDecodeXOR(frmprincipal.txtActualizacion.Text)) + "#" + Trim(CoDecodeXOR("basura")) + "#" + Trim(CoDecodeXOR("basura")) + "#" 'frmprincipal.serial = "#" + Trim(frmprincipal.txtNombre.Text) + "#" + Trim(frmprincipal.cmbMM.Text) + "#" + Trim(frmprincipal.cmbdd.Text) + "#" + Trim(frmprincipal.cmbaa.Text) + "#" + frmprincipal.genero + "#" + Trim(frmprincipal.txtDocumento.Text) + "#" + frmprincipal.cmbTipoDocumento.Text + "#" + Trim(frmprincipal.txtDireccion.Text) + "#" + Trim(frmprincipal.txtTelefono.Text) + "#" _ ' + Trim(frmprincipal.txtCiudad.Text) + "#" + Trim(frmprincipal.txtEnfermedades.Text) + "#" + Trim(frmprincipal.txtAlergiasoReacciones.Text) + "#" + Trim(frmprincipal.txtDiagnostico.Text) + "#" + Trim(frmprincipal.txtFarmacosenuso.Text) + "#" + Trim(frmprincipal.txtProcedimientos.Text) + "#" ' '+ Trim(frmprincipal.txtActualizacion.Text) + "#" + Trim(CoDecodeXOR("basura")) + "#" + Trim(CoDecodeXOR("basura")) + "#" frmserial.Show End Function Public Function CoDecodeXOR(ByVal cadena As String) As String Dim sBuffer As String, l As Long sBuffer = Space$(Len(cadena)) For l = 1 To Len(cadena) Mid$(sBuffer, l, 1) = Chr$(Asc(Mid$(cadena, l, 1)) Xor 7) Next l CoDecodeXOR = sBuffer End Function Public Function able_textbox() frmprincipal.txtNombre.Enabled = True frmprincipal.cmbMM.Enabled = True frmprincipal.cmbaa.Enabled = True

- 93 -

IEL2-I-05-39 IEL2-I-05-41

frmprincipal.cmbdd.Enabled = True frmprincipal.txtDocumento.Enabled = True frmprincipal.cmbTipoDocumento.Enabled = True frmprincipal.txtDireccion.Enabled = True frmprincipal.txtTelefono.Enabled = True frmprincipal.txtCiudad.Enabled = True frmprincipal.txtEnfermedades.Enabled = True frmprincipal.txtAlergiasoReacciones.Enabled = True frmprincipal.txtDiagnostico.Enabled = True frmprincipal.txtFarmacosenuso.Enabled = True frmprincipal.txtProcedimientos.Enabled = True 'Option para Sexo frmprincipal.Option1.Enabled = True frmprincipal.Option2.Enabled = True frmprincipal.cmbRh.Enabled = True frmprincipal.cmbTipoSangre.Enabled = True

End Function CODIGO PARA ENCRIPCION AES MODULO modCryptText Option Explicit ' encrypt text messages using AES_Rijndael Block Cipher ' by Dipankar Basu Private oTest As CRijndael Public Function strEncrypt(ByVal strMsg As String, ByVal pKey As String) As String On Local Error Resume Next Dim ByteArray() As Byte, byteKey() As Byte, CryptText() As Byte Set oTest = New CRijndael ByteArray() = StrConv(strMsg, vbFromUnicode) byteKey() = StrConv(pKey, vbFromUnicode) CryptText = oTest.EncryptData(ByteArray(), byteKey()) Set oTest = Nothing strEncrypt = StrConv(CryptText(), vbUnicode) End Function Public Function strDecrypt(ByVal strMsg As String, ByVal pKey As String) As String On Local Error Resume Next Dim ByteArray() As Byte, byteKey() As Byte, CryptText() As Byte Set oTest = New CRijndael ByteArray() = StrConv(strMsg, vbFromUnicode) byteKey() = StrConv(pKey, vbFromUnicode) CryptText() = oTest.DecryptData(ByteArray(), byteKey()) Set oTest = Nothing strDecrypt = StrConv(CryptText(), vbUnicode) End Function Public Function Hex2Str(ByVal strData As String) On Local Error Resume Next Dim i As Long, CryptString As String, tmpChar As String For i = 1 To Len(strData) Step 2 CryptString = CryptString & _ Chr(Val("&H" + Mid(strData, i, 2))) Next i Hex2Str = CryptString

- 94 -

IEL2-I-05-39 IEL2-I-05-41

End Function Public Function Str2Hex(ByVal strData As String) On Local Error Resume Next Dim i As Long, CryptString As String, tmpAppend As String For i = 1 To Len(strData) tmpAppend = Hex(Asc(Mid(strData, i, 1))) If Len(tmpAppend) = 1 Then tmpAppend = Trim(Str(0)) & tmpAppend CryptString = CryptString & tmpAppend: DoEvents Next Str2Hex = CryptString End Function Public Function FileExists(sFilename As String) As Boolean On Local Error Resume Next Dim Fl As Integer: Fl = Len(Dir$(sFilename)) FileExists = IIf(Err Or Fl = 0, False, True) End Function FORMA PARA PEDIR CONTRASEA: FRMCLAVE Public clave As String, i As Integer Private Sub Command1_Click() clave = txtclave.Text i=1 Unload Me frmprincipal.encriptacion_AES End Sub Private Sub Form_Load() i=0 End Sub

- 95 -

You might also like