Está en la página 1de 257

DISEÑANDO

UN SISTEMA

DESDE CERO

UN PROYECTO COMPLETO -
SISTEMA DE GESTION DE TURNOS MEDICOS

M. Ing. Software: Adriana Fachal

Lic. Sistemas: Alejandra de Arambarri


INTRODUCCION

¿Por qué el desarrollo de un proyecto informático desde su inicio?

Formadas en la idea de poder encontrar todas las respuestas a un proyecto


informático, con una explicación teórica de las metodologías y técnicas que son
de uso habitual para los profesionales de sistemas e incluyendo un inicio y una
finalización definida del proyecto, hemos recorrido varios libros en librerías, y
nos encontramos con que estaban destinados cada uno a un área específica
pero ninguno a un seguimiento completo desde la solicitud de requerimientos
del usuario hasta su implementación.

Nació en nosotras, entonces, la inquietud de que nos íbamos a ocupar de


escribir el libro que estábamos necesitando y no habíamos podido encontrar.

Primero debíamos seleccionar el proyecto, para lo cual tuvimos en cuenta


nuestro ámbito laboral y surgió entonces la idea de un “SISTEMA DE
GESTION DE TURNOS MEDICOS”.

Hace ya más de 15 años que trabajamos en docencia tanto en el área de


análisis como de programación y decidimos nutrir este libro de nuestras propias
experiencias. Esforzamos nuestra memoria y volcamos en él tanto parte de lo
estudiado en la universidad como lo vivido como docentes en diferentes
cátedras.

Durante todos estos años en lo que respecta a análisis hemos logrado


combinar varias metodologías (algunas de las más populares que podemos
mencionar son Yourdon, Cabreras, Booch) creando nuestra propia simbología
y ésta es la que presentamos.

A la hora de programar sabemos que no hay una respuesta a la pregunta ¿Qué


lenguaje es el mejor? Y por lo tanto para la elección del lenguaje nos basamos
en nuestro objetivo de enseñanza-aprendizaje.

No existe un “lenguaje de programación” para iniciarse en programación, la


programación se comienza sobre un papel, haciendo algoritmos. Claro que
para ver si los algoritmos funcionan puede ser más cómodo utilizar un lenguaje
de programación. En este caso lo que recomendamos es utilizar un lenguaje
simple que no sea orientado a objetos y que incorpore una interfaz gráfica para
poder visualizar resultados con mayor motivación. Consideramos que Visual
Basic cumplía con estas características y que era una muy buena elección.
Insistimos en recalcar que de todas formas, no deberíamos excluir ningún
lenguaje ya que que es bueno tener una idea de todos los tipos de lenguaje
para contar con la capacidad de poder seleccionar el más adecuado para cada
tipo de proyecto.

Dedicamos esta obra a nuestros alumnos, esperando que pueda resultarles de


simple guía en varias de las materias que deben cursar a lo largo de su carrera.

Adriana Fachal, Alejandra de Arambarri


INDICE GENERAL

INTRODUCCION

CAPITULO I: CONCEPTOS

Sistema de Información 001


Tipos de Sistemas de Información 003
Sistemas Operacionales 003
Sistemas de Apoyo a la Toma de Decisiones 003
Sistemas de Planeación Estratégica 003
Organización de un proyecto de desarrollo de un sistema 005
Participantes del sistema de información 005
Comité de Administración y Control de Sistemas 005
Líder de Proyecto 005
Analistas de sistemas 006
Usuarios 006
Programadores 006

CAPITULO II: TECNICAS DE OBTENCION DE DATOS

Técnicas de Investigación 008


La entrevista 008
La encuesta 008
El cuestionario 008
La observación 008

CAPITULO III: CIRCUITOS ADMINISTRATIVOS DE LA EMPRESA

Organigramas 009
Objetivos 009
Utilidad del Organigrama 010
Principios Básicos del Organigrama 010
Distintos Sistemas de Representación de Organigramas 011
Sistemas Triangulares 012
Sistemas Circulares 016
Cursogramas 017

CAPITULO IV: HERRAMIENTAS PARA LA GESTION DE PROYECTOS

Diagrama de GANTT 021


Desventajas 022
Ventajas 022
Ejemplo 022

PERT (Evaluación de Proyectos y Evaluación Técnica 024


CAPITULO V: LAS HERRAMIENTAS DE MODELADO

Diagrama de Contexto 034


Tabla de Eventos 037
Diagrama de Flujo de Datos (DFD) 039
Integración Diagrama de Contexto (DC) y Diagrama de Flujo de Datos 044
(DFD)
Diagrama Entidad-Relación (DER) 047
Los Componentes del DER 047
Diccionario de Datos (DD) 057
Balanceo de modelos 058
Normalización 060
Especificación de Procesos 071
Lenguaje Estructurado 071
Tablas de Decisión 076
Diagrama de Flujo 078

CAPITULO VI: EL CICLO DE VIDA DEL SOFTWARE

El Concepto del Ciclo de Vida de un Proyecto 080


Etapas del Ciclo de Vida Clásico 080
Reconocimiento del Problema 081
Planeamiento 082
Análisis del Sistema 083
Diseño del Sistema 086
Diseño Global 086
Diseño Detallado 086
Desarrollo (Codificación) 087
Pruebas 087
Implementación 088
Evaluación y Mantenimiento 088
Retiro 088

CAPITULO VII: UN PROYECTO COMPLETO – SISTEMA DE GESTION


DE TURNOS MEDICOS

Reconocimiento del Problema 089


Planeamiento 093
Análisis del Sistema (Analizar el problema actual) 095
Diseño (para el nuevo sistema) 122
Diseño Global 123
Diseño Detallado 137
Desarrollo (Codificación) 156
Pruebas 238
Implementación 246
Capítulo 1

Conceptos
SISTEMA DE INFORMACION

Un sistema de información: es un conjunto de elementos interrelacionados que


interactúan entre sí con el fin de apoyar las actividades de una empresa o
negocio. Teniendo en cuenta el equipo computacional1 necesario para que el
sistema de información pueda operar y el recurso humano2 que interactúa con
el Sistema de información, el cual está formado por las personas que utilizan el
sistema.

Un sistema de información realiza cuatro actividades básicas: entrada,


almacenamiento, procesamiento y salida de información.

Entrada de Información: Es el proceso mediante el cual el Sistema de


Información toma los datos que requiere para procesar la información. Las
entradas pueden ser manuales o automáticas. Las manuales son aquellas que
se proporcionan en forma directa por el usuario, mientras que las automáticas
son datos o información que provienen o son tomados de otros sistemas o
módulos. Esto último se denomina interfases automáticas.

Almacenamiento de información: El almacenamiento es una de las


actividades o capacidades más importantes que tiene una computadora, ya que
a través de esta propiedad el sistema puede recordar la información guardada
en la sección o proceso anterior. Esta información suele ser almacenada en
estructuras de información denominadas archivos.

Procesamiento de Información: Es la capacidad del Sistema de Información


para efectuar cálculos de acuerdo con una secuencia de operaciones
preestablecida.

Salida de Información: La salida es la capacidad de un Sistema de


Información para sacar la información procesada o bien datos de entrada al
exterior.
Es importante aclarar que la salida de un Sistema de Información puede
constituir la entrada a otro Sistema de Información o módulo. En este caso,
también existe una interfase automática de salida. Por ejemplo, el Sistema de
Control de Clientes tiene una interfase automática de salida con el Sistema de
Contabilidad, ya que genera las pólizas contables de los movimientos
procesales de los clientes.

Estos 4 requisitos mencionados son los que contribuyen a la toma de decisión.

1
El equipo computacional: el hardware necesario para que el sistema de información pueda operar.

2
El recurso humano que interactúa con el Sistema de Información está formado por las personas que utilizan el
sistema.

Página 1
PARA ESQUEMATIZAR LO EXPRESADO RECIENTEMENTE PODEMOS
EXPONER LO SIGUIENTE:

Un sistema de información es un conjunto de elementos que interactúan entre


sí con el fin de apoyar las actividades de una empresa o negocio.

UN SISTEMA DE INFORMACION DEBE CUMPLIR CON 4 REQUISITOS

1. Recolectar (Entrada De Información)


2. Almacenar TOMA DE DECISION
3. Procesar
4. Distribuir (Salida De Información)

Entrada Proceso Salida

Almacen
amiento

“Un sistema de información se puede definir como un conjunto de componentes


interrelacionados entre sí que recolectan, procesan, almacenan y distribuyen
información para apoyar la toma de decisiones y el control de una organización“

EJEMPLO:
A continuación se muestran las diferentes actividades que puede realizar un
Sistema de Información de Control de Clientes:

Entradas:
• Datos generales del cliente: nombre, dirección, tipo de cliente, etc.
• Políticas de créditos: límite de crédito, plazo de pago, etc.
• Facturas (interfase automático).
• Pagos, depuraciones, etc.

Proceso:
• Cálculo de antigüedad de saldos.
• Cálculo de intereses moratorios.
• Cálculo del saldo de un cliente.

Almacenamiento:
• Movimientos del mes (pagos, depuraciones).
• Catálogo de clientes.
• Facturas.

Salidas:
• Reporte de pagos.
• Estados de cuenta.
• Pólizas contables (interfase automática)
• Consultas de saldos en pantalla de una terminal.

Página 2
TIPOS DE SISTEMAS DE INFORMACION

SISTEMAS OPERACIONALES

Los sistemas formales se apoyan en definiciones fijas y aceptadas de datos y


procedimientos para recolectar, almacenar, procesar, distribuir y utilizar estos
datos.
Los sistemas formales de información pueden estar basados en computadora o
ser manuales. Los sistemas de información basados en computadora se
apoyan en la tecnología de software y hardware de cómputo para procesar y
distribuir la información. Las computadoras electrónicas y los programas de
software relacionados son la base técnica, las herramientas y el material de los
modernos sistemas de información. Las computadoras proveen el equipo para
almacenar y procesar la información. Los programas de cómputo o software
son conjunto de instrucciones funcionales que dirigen y controlan el
procesamiento por computadora. Saber cómo funcionan las computadoras y
los programas de cómputo es importante para el diseño de soluciones a
problemas de la organización, pero las computadoras son sólo parte de un
sistema de información

La mayor parte de los sistemas automatizados de información que se crearon


son sistemas operacionales que ayudan a llevar a cabo los detalles del trabajo
cotidiano de la organización. Estos sistemas, que también se conocen como
sistemas de procesamiento de transacciones, incluyen los sistemas de nómina,
de contabilidad y de manufactura. Estos sistemas operacionales se han creado
lenta, penosamente y a alto costo.

SISTEMAS DE APOYO A LA TOMA DE DECISIONES

Muchas organizaciones están enfocando su atención a un nuevo tipo de


sistemas: los de apoyo a la toma de decisiones. Estos sistemas
computacionales no toman decisiones por sí mismos, sino ayudan a los
administradores y a otros profesionales de una organización a tomar decisiones
inteligentes y documentadas acerca de los diversos aspectos de la operación.
Existen un gran número de ejemplos sencillos de sistemas de apoyo a
decisiones: programas de hoja de cálculo, sistemas de análisis estadístico,
programas de pronóstico de mercados. De hecho, una característica común de
los sistemas de apoyo a las decisiones es que no sólo recuperan y exhiben los
datos, sino que también realizan varios tipos de análisis matemáticos y
estadísticos de los mismos. También tienen la capacidad de presentar la
información en una variedad de formas gráficas (tablas, gráficos, etc.) al igual
que en forma de reportes (informes) convencionales.

SISTEMAS DE PLANEACION ESTRATEGICA

Los sistemas de planeación estratégica son utilizados por los gerentes en jefe
para evaluar y analizar la misión de la organización. En lugar de dar consejos
acerca de alguna decisión de negocios aislada, estos sistemas ofrecen
consejos más amplios y generales acerca de la naturaleza del mercado, las
preferencias de los consumidores, el comportamiento de la competencia, etc.

Página 3
Los sistemas de planeación estratégica no son programas de computadora en
sí; son complejas combinaciones de actividades y procedimientos, muchas de
las cuales las llevan a cabo humanos utilizando información obtenida de
fuentes externas (estudios de mercado, etc.) y datos internos de los sistemas
operacionales de la organización y los sistemas de apoyo a decisiones.

La jerarquía de los sistemas de procesamiento de información se muestra en la


siguiente figura

Sistemas
de
Planeación
Estratégica

Sistemas de Apoyo
a la toma de
Decisiones

Sistemas
Operacionales

Nótese en la figura; la relación existente entre los tres distintos tipos de


sistemas. Los sistemas operacionales representan la base sobre la cual se
cimentan los sistemas de apoyo a decisiones y de planeación estratégica. Los
sistemas operacionales crean los datos requeridos por los sistemas de nivel
superior y continúan actualizando los datos de una manera continua.
La forma piramidal representa otra característica típica de los sistemas de
información que se pueden encontrar en la mayoría de las organizaciones hoy
en día: el tamaño de los sistemas operacionales (medidos en años-persona, o
en millones de instrucciones, etc.) excede por mucho al de los sistemas de
apoyo a la toma de decisiones y al de los sistemas de planeación estratégica.

Página 4
ORGANIZACIÓN DE UN PROYECTO DE DESARROLLO DE UN SISTEMA

Para poder llevar a cabo el conjunto de tareas que componen la totalidad del
proyecto de desarrollo de sistemas, se debe contar con una organización
adecuada a tal necesidad.

Una organización tipo sería:

Comité de
Administración y
Control de
Sistemas

Líder
del
Proyecto

Analista
de Programadores Usuarios
Sistemas

PARTICIPANTES DEL SISTEMA DE INFORMACIÓN

a) Comité de Administración y Control de Sistemas

Las funciones a cumplir por el comité son:

• Aprobar los cambios importantes a los sistemas en uso


• Establecer prioridades entre los diversos proyectos
• Evaluar el rendimiento de los sistemas implementados para verificar
que cumplen con los objetivos para los cuales fueron diseñados

b) Líder de Proyectos

Sus funciones radican en conducir el equipo de trabajo que realiza las tareas

Página 5
c) El analista de Sistemas

Este es usted y en un sentido más amplio, desempeña varios papeles


• Arqueólogo y escribano: Una de las principales labores es descubrir
detalles y documentar la política de un negocio que pudieran existir solo
como “tradiciones tribales” transmitidas de generación a generación por los
usuarios
• Innovador: Debe distinguir entre síntomas, problemas del usuario y causas.
El analista debe ayudar al usuario a explorar aplicaciones novedosas y más
útiles de las computadoras así como formas nuevas de hacer negocios.
• Mediador: El analista a menudo se encuentra en medio, entre usuarios,
administradores, programadores, auditores y otros diversos participantes,
los cuales frecuentemente están en desacuerdo entre si. Es tentador para
el analista imponer su propia opinión respecto a como debe ser el sistema o
cuales funciones debe cumplir. Pero su labor primordial es obtener un
consenso y esto requiere del delicado arte de la diplomacia y la negociación.

Las funciones a cumplir por el analista son:


• Relevar situaciones para determinar la existencia de problemas
• Documentar los procedimientos existentes y desarrollar nuevos
procedimientos tendientes a solucionar problemas
• Efectuar análisis costo-beneficio de las soluciones propuestas
• Desarrollar las especificaciones de los programas
• Diseñar entradas y salidas de la información en el computador
• Supervisar y puesta en funcionamiento del sistema

d) Usuarios

Es el participante más importante en el juego de los sistemas. Es aquel (o


aquellos) para quien se construye el sistema. Es la persona a la que tendrá que
entrevistar, a menudo con gran detalle, a fin de conocer las características que
deberá tener el nuevo sistema para poder tener éxito.

El usuario es el “dueño” en el sentido de que es él quien recibe el sistema


cuando se termina de crearlo. Y el usuario es el “cliente” por lo menos en dos
sentidos importantes: 1) como en muchas otras profesiones, “el cliente siempre
tiene la razón”, sin importar lo exigente, desagradable o irracional que pueda
parecer y 2) el cliente es el que a fin de cuentas paga el sistema y usualmente
tiene el derecho de rehusarse a pagar si no esta conforme con el producto.

Clasificación de los usuarios por categoría de trabajo

En un proyecto típico de análisis de sistemas se pasara una considerable


cantidad de tiempo entrevistando a los usuarios para determinar los
requerimientos del sistema. Pero, ¿cuáles usuarios?, ¿a que nivel? Desde
luego, esto dependerá del proyecto y de las políticas de su organización. Sin
embargo, habitualmente se tendrá que interactuar con individuos de tres
categorías de trabajo: usuarios operacionales, usuarios supervisores y usuarios
ejecutivos.

Página 6
Usuarios Operacionales

Son oficinistas, administradores y operadores que son los que mas


probablemente tendrán contacto diario con el nuevo sistema.
Los usuarios de este nivel se preocupan mucho por las funciones que tendrá el
sistema, pero es más probable aún que se preocupen por los detalles de la
interfaz humana.
Los usuarios operacionales tienden a poseer un panorama “local” del sistema;
por lo general son conocedores del trabajo específico que hacen y de las
personas con las que tienen comunicación inmediata. “No están familiarizados
con el panorama general”

Usuarios Supervisores

Usualmente administran a un grupo de usuarios operacionales y son


responsables de sus logros.
El usuario supervisor será con quien usted tendrá el contacto cotidiano primario.
Es el que definirá los requerimientos y las políticas de la empresa que su
sistema deberá realizar.

Usuarios de nivel ejecutivo

En general no se involucran directamente con el proyecto de desarrollo del


sistema, a menos que el proyecto sea tan amplio y tan importante que tenga un
impacto de primer orden en la empresa.

Los usuarios ejecutivos se preocupan más por los detalles estratégicos y las
ganancias/perdidas a largo plazo y se interesan en el panorama global del
sistema.
Los usuarios ejecutivos por lo general pueden trabajar con modelos abstractos
de un sistema; de hecho, no estarán interesados en los “modelos físicos” del
sistema y se preguntaran por que se toma usted la molestia de mostrárselos.

e) Los Programadores

El programador se encarga de la implementación de prototipos mediante un


lenguaje de programación, que compilados pueda entender la computadora.

Página 7
Capítulo 2

Técnicas de

Obtención de Datos
TECNICAS DE INVESTIGACION

La recolección de datos se refiere al uso de una gran diversidad de técnicas y


herramientas que pueden ser utilizadas por el analista para desarrollar los
sistemas de información, los cuales pueden ser las entrevistas, la encuesta, el
cuestionario, la observación. Todos estos instrumentos se aplicarán en un
momento en particular, con la finalidad de buscar información que será útil a
una investigación en común.

LA ENTREVISTA
Las entrevistas se utilizan para recabar información en forma verbal, a través
de preguntas que propone el analista. Quienes responden pueden ser gerentes
o empleados, los cuales son usuarios actuales del sistema existente, usuarios
potenciales del sistema propuesto o aquellos que proporcionarán datos o serán
afectados por la aplicación propuesta. El analista puede entrevistar al personal
en forma individual o en grupos algunos analistas prefieren este método a las
otras técnicas que se estudiarán más adelante. Sin embargo, las entrevistas no
siempre son la mejor fuente de datos de aplicación. Dentro de una
organización, la entrevista es la técnica más significativa y productiva de que
dispone el analista para recabar datos. En otras palabras, la entrevista es un
intercambio de información que se efectúa cara a cara. Es un canal de
comunicación entre el analista y la organización; sirve para obtener información
acerca de las necesidades y la manera de satisfacerlas, así como consejo y
comprensión por parte del usuario para toda idea o método nuevos. Por otra
parte, la entrevista ofrece al analista una excelente oportunidad para establecer
una corriente de simpatía con el personal usuario, lo cual es fundamental en
transcurso del estudio.

LA ENCUESTA
Una "encuesta" recoge información de una "muestra." Una "muestra" es
usualmente sólo una porción de la población bajo estudio. No sólo las
encuestas tienen una gran variedad de propósitos, sino que también pueden
conducirse de muchas maneras, incluyendo por teléfono, por correo o en
persona.

EL CUESTIONARIO
Para los analistas los cuestionarios pueden ser la única forma posible de
relacionarse con un gran número de personas para conocer varios aspectos del
sistema. Cuando se llevan a cabo largos estudios en varios departamentos, se
pueden distribuir los cuestionarios a todas las personas apropiadas para
recabar hechos en relación al sistema. Al igual que la entrevistas, deben
diseñarse cuidadosamente para una máxima efectividad.

LA OBSERVACIÓN
Esta técnica consiste en observar a las personas cuando efectúan su trabajo.
Como técnica de investigación, la observación tiene amplia aceptación
científica. Permite al analista determinar qué se está haciendo, cómo se está
haciendo, quien lo hace, cuando se lleva a cabo, cuanto tiempo toma, dónde se
hace y por que se hace."¡Ver es creer! Observar las operaciones le proporciona
al analista hechos que no podría obtener de otra forma.

Página 8
Capítulo 3

CIRCUITOS

ADMINISTRATIVOS

DE LA

EMPRESA
ORGANIGRAMAS

Los organigramas son la representación gráfica de la estructura orgánica de


una empresa u organización que refleja, en forma esquemática, la posición de
las áreas que la integran, sus niveles jerárquicos, líneas de autoridad y de
asesoría.

La estructura de la empresa es de naturaleza intangible (no visualizable); con el


organigrama se trata de elaborar como sería la estructura de la empresa
mediante una representación gráfica abstracta, pero no es la estructura de la
empresa.

El organigrama constituye una herramienta de gran utilidad y es el punto de


comienzo para conocer una empresa.

Es preciso señalar que no puede representarse ninguna situación que no este


definida con claridad; lo que no este perfectamente definido presentara una
dificultad de representación, dificultad que quizás sea útil, induciendo a poner
remedio a la indefinición.

OBJETIVOS DEL ORGANIGRAMA

El organigrama responde a 2 objetivos:

1) De información: debe quitar incertidumbre; es decir, brindar información

2) De racionalización estructural y funcional: mínima cantidad de recursos y


máximos beneficios.

En materia de información simplifica y precisa la necesaria comunicación


tendiente a:

a) Definir y hacer conocer las áreas de acción de cada integrante


b) Complementar el manual administrativo
c) Hacer conocer a todos los integrantes su posición relativa en la estructura
d) Capacitar al personal de la organización
e) Instituir y ubicar a los recién ingresados
f) Difundir hacia el exterior de la organización el conocimiento de su estructura

En cuanto a racionalización estructural y funcional, el organigrama se utiliza


para:

a) Revelar y analizar las estructuras y funciones vigentes; es decir, determinar


tareas de cada sector y analizar en que jerarquía esta
b) Proyectar y elaborar nuevas estructuras y funciones, y en su caso hacer
conocer los cambios decididos;
c) Establecer comparaciones estructurales
d) Permite visualizar rápidamente fallas en la estructura de la empresa

Página 9
UTILIDAD DEL ORGANIGRAMA

Destaquemos nuevamente el hecho de que los organigramas son una


herramienta para la racionalización, pero no son la estructura de la
organización propiamente dicha. Son como una fotografía de la estructura
simplificada, y no la estructura en sí.
Tampoco son una herramienta mágica, que por su simple posesión haya de
arreglar automáticamente los problemas existentes: su utilidad consiste en
poner de manifiesto esas deficiencias. Pueden detectar fallas estructurales,
tales como:

a) Indefinición de niveles jerárquicos, de áreas, de rangos o categorías


b) Supervisión sobre un único subordinado
c) Dependencia indefinida, es decir, se puede llegar a descubrir que hay gente
que no depende de nadie
d) Áreas de control excesivamente amplias, es decir, un solo individuo tiene
muchas personas para controlar
e) Inadecuada asignación de niveles jerárquicos
f) Defectuosa subdivisión de áreas
g) Control interno incoherente
h) Supervisión directa múltiple sobre un subordinado

PRINCIPIOS BASICOS DE LOS ORGANIGRAMAS

a) Unidad de mando
b) Relaciones de dependencias claras y definidas
c) Definición precisa de los niveles jerárquicos
d) Definición de las principales funciones ejecutivas y asesoras
e) División del trabajo
f) Subordinación y dependencia
g) Existencia de responsabilidad y delegación de autoridad

Página 10
DISTINTOS SISTEMAS DE REPRESENTACION DE ORGANIGRAMAS

Las formas mas conocidas de representación de estructuras organizativas se


inspiran en dos formas geométricas: la pirámide y el cono, de las cuales
derivan diagramas en triangulo, o en circulo.

Los sistemas triangulares conciben a la estructura como una pirámide, en


cambio la forma circular la imagina de forma cónica.

SISTEMAS
TRIANGULARES

DIAGRAMACION PIRAMIDAL
VERTICAL VERTICAL

LINEAL

SISTEMA AFNOR
ANTIGUO

TIPOS DE
REPRESENTACION DIAGRAMACION PIRAMIDAL
HORIZONTAL HORIZONTAL

SISTEMA AFNOR
ACTUAL

ORLOGRAMA

SISTEMA
CIRCULAR

SISTEMAS
CIRCULARES
SISTEMA SEMI-
CIRCULAR

Página 11
SISTEMAS TRIANGULARES

En todos los sistemas triangulares el organigrama es la combinación de varios


triángulos menores.

Dentro de estos métodos pueden citarse dos formas de diagramación, a saber:

a) Diagramación Vertical: Entre los sistemas de diagramación vertical


podemos citar: piramidal vertical, lineal y sistema Afnor antiguo

a.1) Piramidal vertical

Este sistema es, sin duda, el más difundido en el mundo entero.


Su diagramación comienza con los entegramas de mayor jerarquía en la parte
superior y sigue hacia abajo con los de jerarquía menor.
El sistema presenta el inconveniente de que, si bien se va reduciendo cada vez
mas el tamaño de los entegramas hacia su base, la gran cantidad de los
mismos, y su forma rectangular, con su lado mayor apoyado sobre la base del
triangulo, hacen que la parte inferior del organigrama ofrezca un gran
desarrollo.

PIRAMIDAL VERTICAL

NIVEL 1

NIVEL 2 NIVEL 2 NIVEL 2

NIVEL 3 NIVEL 3 NIVEL 3 NIVEL 3 NIVEL 3 NIVEL 3

Página 12
a.2) Lineal

Este sistema es igual al piramidal vertical, con la única diferencia de que no se


recuadran los entegramas sino que en su lugar se escribe una descripción, con
los datos que se juzgue oportuno incluir. En todo lo demás este sistema es
igual al anterior.

a.3) Sistema Afnor Antiguo (Sistema Francés Antiguo)

El sistema adoptado antiguamente por la entidad francesa que se ocupa de


racionalización de métodos y materiales representan los entegramas en dos
posiciones diferentes: horizontalmente, para sus primeros niveles; y
verticalmente, para los últimos.

b) Diagramación Horizontal: Entre los sistemas de diagramación horizontal


podemos citar: piramidal horizontal, sistema Afnor actual, orlograma y Sistema
IRAM

b.1) Piramidal horizontal

Este sistema es similar al piramidal vertical, pero en lugar de desarrollarse de


arriba hacia abajo, lo hace de izquierda a derecha.
Resulta un gráfico más armónico y con lectura totalmente horizontal.

Página 13
b.2) Sistema AFNOR Actual (Sistema Francés Actual)

El nuevo sistema francés de representación de organigramas es sumamente


angosto y alto, y todos sus entegramas son de igual tamaño. Se distinguen las
jerarquías por la ubicación del entegrama, que va algo mas a la derecha cuanto
más disminuye el nivel jerárquico.

b.3) Orlograma

Este sistema fue ideado por JACQUES LORSTEIN, y tiene gran similitud con el
actual sistema francés y no tiene mayor ventaja sobre éste. Su denominación
surge de la combinación de 4 silabas: OR, que son las dos primeras letras de
organización; LO, por las dos primeras letras del apellido del autor, y GRAMA
como sufijo, por escritura o dibujo.

LA NORMA IRAM 34.504, SOBRE ORGANIGRAMAS

ALCANCES

Esta norma tiene por objeto establecer la metodología para la confección de


organigramas.

Se divide en dos partes dispositivas. La primera define los términos básicos


empleados; y la segunda establece la metodología recomendada.

DEFINICION DE TERMINOS BASICOS

Los conceptos definidos por la norma son: Entegrama, líneas de dependencia,


líneas de vinculación y red estructural.

Entegrama: es una nueva palabra incorporada por IRAM.

El entegrama se representa mediante un rectángulo que debe guardar las


siguientes proporciones:

• El ancho debe ser el doble del alto;


• El campo superior es de 0,6 de alto
• El campo inferior es 0,4 de alto
• Opcionalmente puede llevar un recuadro interior, en el ángulo superior
derecho

En cuanto al contenido del entegrama:

En el campo superior se indica la denominación del área; en el campo inferior


se indica el cargo y nombre del responsable del área; si hubiera dos o más
corresponsables, se indicaran todos ellos en el mismo entegrama, pues este
representa un área o sector, y no a las personas responsables.
El recuadro del ángulo superior derecho sirve para indicar cuando se desee, la
dotación de personal. La cifra comprenderá a todos, desde el jefe superior al
último empleado de las áreas dependientes.

Página 14
Líneas de dependencia: son las líneas que relacionan jerárquicamente los
entegramas. Vale decir que son aquellas líneas que unen los entegramas de
mayor jerarquía con los de igual o menor jerarquía, dependientes de aquellos.

Líneas de vinculación: son líneas que representas relaciones funcionales, no


jerárquicas entre los entegramas. Estas líneas marcan todas aquellas
relaciones que, en razón de sus funciones se establecen entre determinadas
unidades de la organización, ya sea para cumplir tareas de asesoramiento,
asistencia, etc.. Las líneas de vinculación se emplean para representar la
relación existente cuando un mismo ente esta conectado funcionalmente con
otro u otros sin que exista dependencia jerárquica entre ellos.

Red estructural: es el conjunto de líneas de relación del organigrama, o sea


que involucra tanto a las líneas de dependencia como a las de vinculación, que
representan las relaciones entre todos los entegramas.
En otras palabras, podríamos decir que es la suma de las líneas de vinculación
y dependencia.

Cantidad de
AREA Personal

Responsable

SISTEMAS CIRCULARES

Dentro de los sistemas circulares tenemos dos sistemas de diagramación:


sistema circular completo y sistema semicircular.

Ambos sistemas circulares están conformados por círculos, concéntricos, en


cuyo círculo central esta ubicada la máxima jerarquía de la organización; el
círculo inmediato que rodea a éste es la jerarquía que le sigue, y así
sucesivamente para las otras jerarquías.

Estos sistemas no están tan difundidos como los triangulares, por varias
razones:

a) son sistemas de capacidad limitada y no diferencian o admiten organismos


de tipo asesor o auxiliar
b) su texto se desarrolla en circulo o semicírculo, lo que dificulta su
diagramación y lectura
c) no admiten la representación de relaciones funcionales u otra forma de
vinculación entre los entegramas
d) son más dificultosos para dibujarlos
e) la representación puede no guardar una relación adecuada con la jerarquía
correspondiente a causa de su tamaño
f) no existen reglas definidas para su representación gráfica.

Página 15
SISTEMA CIRCULAR

JEF
E
CON DPTO
TA .
GE B.
NTE IAL FIN RE
E RC AN NT
E R E CI E
G OM ER
C GERENTE O
GE GENERAL -
PR RE AD IVO
OD NT
E N TE A T
UC D E R
TO E ER IST
S G IN
M

SISTEMA SEMI - CIRCULAR


GT AN.

GERENTE
F IN

D .
TE

.
E.

GENERAL
G

GT E.
A

E
PRO . GT M.
D CO

Página 16
CURSOGRAMAS

Un cursograma es la representación gráfica de procedimientos o rutinas


administrativas. Entendemos como procedimiento administrativo la secuencia
sistemática de acciones que se realizan para alcanzar cada una de las distintas
finalidades de la organización.

El cursograma es una forma de representar, por medio de diagramas o


representaciones graficas, circuitos de información y flujo de documentos.
Representa al sistema administrativo no concentrado en un lugar o sector, si no
en todo aquello donde la información ramifica y fijando los limites de extensión
solo en función de la conveniencia de quien efectúa el análisis.

SIMBOLOS DE REPRESENTACION DE ACTIVIDADES

La norma IRAM 34.501 establece los símbolos a emplear para la


representación grafica de procedimientos administrativos. Se ha buscado usar
una cantidad mínima de símbolos diferentes, tratando de que el sistema no
fuera complejo ni de dificultosa interpretación. Además, casi todos los símbolos
siguen principios nemotécnicos, relacionando su forma con su significado.

TABLA DE SIMBOLOGIAS

Representa toda acción de elaboración,


Operación modificación o incorporación de
información o decisión. Ej. Emisión de
formularios o de incorporación de datos,
o de autorizaciones sobre el mismo,
agregado de firmas, etc.
Control Representa toda acción de verificación
(control, comprobación, constatación,
etc.).Aquí verificamos algo.
En general tales controles se efectúan
sobre datos en los formularios u otros
soportes de la información y consisten
en verificar los cálculos, comprobar si
los datos son correctos o completos,
etc. Por ej. Alguien hace una factura y la
misma se debe controlar (si las cuentas
están bien, si los ítems son correctos,
etc.)
Demora Representa toda detención transitoria
del proceso en espera de un
acontecimiento determinado.
El hecho de que exista una espera
puede significar que requiere ordenar de
alguna manera la documentación
procesada aunque ello no es forzoso.
Su característica fundamental es la
espera de algún acontecimiento.

Página 17
Archivo transitorio Representa el almacenamiento
sistemático en forma temporaria de
elementos portadores de información.
Cabe aclarar que se considera como
elemento portador de información a todo
vehículo que se emplea en un
procedimiento administrativo, tales
como formularios, el microfilm de los
documentos comerciales, las cintas
perforadas, los discos magnéticos, etc.
Su característica fundamental es la
consulta sistemática.
Archivo definitivo Representa el almacenamiento
permanente de elementos portadores de
información.
Como eventualmente puede ser
consultado, debe ser ordenado
sistemáticamente, pues de lo contrario
perdería utilidad como archivo y sería
una mera guarda de documentos.
Su característica de permanencia, que
lo identifica, no significa que la
documentación del mismo debe ser
guardada indefinidamente, sino que se
retiene por lapsos prolongados ante una
eventual necesidad de consulta o
inspección, o en cumplimiento de
disposiciones legales.
Operación y control Es la unión de los primeros. Ej. La
simultaneo persona que hace la factura es la misma
que la verifica.
Destrucción Este símbolo representa la eliminación
de la información, se destruya o no el
soporte que lo sostiene.
El elemento que soporta los datos
puede volver a usarse, si ello es posible,
con un nuevo uso o destino, tal como
ocurre con las cintas o discos
magnéticos que se vuelven a procesar,
puesto que sirven para múltiples usos.
Por ejemplo un diskette del que se
destruye la información, pero no el
diskette.

Página 18
SIMBOLOS REPRESENTATIVOS DE CURSOS DE ACCION

Alternativas Se utiliza para indicar que


la información
dependiendo de algún
elemento va a tener
distintos cursos de acción
Traslado Es el símbolo que une los
distintos símbolos.
Desplazamiento físico del
soporte que contiene la
información. Por ej.
Traslado de una factura
desde la caja hasta el
sector de empaque
Toma de información Hay desplazamiento de
información, pero no de
soporte. La flecha indica
el sentido de la circulación
de los datos.
Por ej. Al hablar por
teléfono se pasa la
información y el soporte
no se desplaza.

SIMBOLOS DE UNION O VINCULACION

Proceso no registrado Representa acciones que


no se conocen, no me
interesan o no es
necesario representar.
Es utilizado especialmente
cuando se trata de
procedimientos fuera del
ámbito de la organización,
o cuando se quiere
simplificar la diagramación
eliminando detalles que
no hacen a la cuestión.
Conector Trata de unir distintos
procedimientos
administrativos

Página 19
SIMBOLO DE SOPORTE DE INFORMACION

Formulario u otro soporte Representa el elemento


de información portador de la información

SIMBOLO DE DESLOCE

Símbolo de desloce Es la distribución de


distintos ejemplares del
mismo documento

Página 20
Capítulo 4

HERRAMIENTAS PARA

LA GESTION DE

PROYECTOS
DIAGRAMA DE GANTT

El gráfico GANTT o gráfico de barras es una forma de planear y programar en


el tiempo la asignación de tareas entre distintos recursos (hombres o
máquinas) y posibilitar el control posterior de cumplimiento de plazos.
Sin duda es el complemento ideal del diagrama de PERT ya que este diagrama
no resulta operativo para concretar la distribución de tareas entre los
componentes de un equipo y menos aún para perseguir el cumplimiento de los
responsables.

El diagrama de GANTT, por el contrario, partiendo de recursos y tareas


definidas en cantidad y tiempo, es el instrumento ordenador por excelencia.
Permite visualizar rápidamente cómo ocupar totalmente los tiempos disponibles
de los recursos; y a la vez, también, hace posible ver como cada tarea se
correlaciona con un recurso, tanto en lo relativo a asignación como también a
plazo de ejecución.

Para llevar a cabo esta técnica se comienza por hacer un listado de cada una
de las tareas, identificando a cada una de ellas con una letra, haciendo una
descripción y colocando su duración.

El gráfico GANTT tiene una estructura sencilla; consiste en una representación


gráfica sobre dos ejes.

El eje vertical se lo utiliza indistintamente para representar tareas o recursos


del proyecto mientras que en el eje horizontal se representa siempre el tiempo:
los días, semanas, o meses del programa, dependiendo de la duración del
proyecto.

Cada tarea o actividad se representa por una línea proporcional al tiempo que
demanda la misma. Por ejemplo, si se desea estar de regreso de vacaciones el
día 20 de febrero y en el viaje de vuelta se emplean 2 días, éste tendrá que
comenzar el 18 de febrero. Tal circunstancia se indicará con una línea que
abarca 2 días.

Se debe considerar también que existen tareas que pueden llevarse a cabo en
forma simultánea. Éstas se representan a la misma altura.

Finalmente, también se debe tener en cuenta que paralelismo no significa


simultaneidad, ni contar siempre con una sola persona para la realización de
todas las actividades.

Este tipo de modelo es particularmente fácil de implementar con una simple


hoja de cálculo, pero también existen herramientas especializadas, la más
conocida es Microsoft Project.

Página 21
Desventajas del diagrama de GANTT

1. No es muy sencilla la determinación de los márgenes


2. Se observa que se planea y se programa al mismo tiempo, lo cual ocasiona
dificultad en conocer la secuencia.
3. No permite una determinación inmediata de las tareas realmente
importantes (las que no admiten demoras)
4. En proyectos complejos, las tareas son muy numerosas, lo cual hace difícil
conocer la interdependencia de las tareas y su manejo.

Ventajas del Diagrama de GANTT

1. Es conocido y fácilmente comprensible aún para personas sin preparación


previa
2. Se adapta muy bien al control de proyectos

EJEMPLO DE CÓMO REPRESENTAR UN PROYECTO

Supóngase que una familia decida planear sus vacaciones con suficiente
anticipación, sobre todo teniendo en cuenta que se dispone por razones de
trabajo, de sólo 20 días.

Se comienza por hacer el siguiente listado de tareas:

IDENTIFICACION TAREA DURACIÓN


A Elección del lugar de veraneo (campo, playa, 5
montaña)
B Recabar información sobre el estado de los caminos 2
C Adquisición de elementos necesarios (ropa, artículos 5
para deportes, etc.)
D Requerir información sobre hoteles. Disponibilidad, 4
precio, reserva
E Documentación de viaje (documentos de identidad, 4
vacuna antivariólica, etc.)
F Documentación del auto (constancia de 8
patentamiento, actualización del seguro, etc.)
G Preparar el auto (revisión general y ajuste; de 2
acuerdo con el estado de los caminos, defensas
antirripio o preparación para alta montaña, etc.)
H Presupuesto definitivo (para conocer cuánto dinero 1
será necesario llevar)
I Compra de cheques de viajero o depósito en Caja de 1
Ahorros, para no llevar dinero en efectivo
J Envío de bultos por ferrocarril (para no transportarlos 4
en el auto, pero de tal manera que estén en destino
cuando se arribe al lugar de veraneo)
K Efectuar viaje a la zona de veraneo 2
L Veraneo en la zona elegida 15
M Regreso a la zona de partida 2

Página 22
Leyendas:

• Una vez finalizada la investigación acerca del estado de los caminos voy a
comenzar a averiguar acerca de la documentación que necesito para el viaje

• La documentación que necesito del auto puedo empezar a verificarla desde


el momento que conozco el lugar de veraneo donde voy a ir.

• El auto voy a comenzar a prepararlo recién una vez que conozca el hotel
donde voy a hospedarme

• Se conoce que la tarea de preparar documentación demandará 4 días, y


está programada para efectuarla entre el 19 y 23 de enero.

• Se conoce que se debe estar de regreso el 13 de febrero

1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
A
B
C
D
E
F
G
H
I
J
K
L
M

Página 23
PERT (EVALUACION DE PROYECTOSY REVISION TECNICA)

El diagrama PERT es una representación gráfica de las relaciones entre


las tareas del proyecto que permite calcular los tiempos de un proyecto
de forma sencilla.

Proyecto: es un conjunto de tareas que se realiza en un determinado orden.


Una actividad consume tiempo y recursos.

Suceso: es un momento en el tiempo que indica cuando empieza o termina


una actividad. No consume ni tiempo ni recursos.

Un proyecto puede esquematizarse gráficamente usando un grafo donde los


arcos del grafo indican las actividades, y los vértices los sucesos. Las flechas
irán de izquierda a derecha indicando que se avanza en el tiempo.
Como se indica en la siguiente figura el vértice 1 es el suceso inicial de la
actividad A, y el vértice 2 es su suceso final; además, éste sirve de suceso
inicial para la actividad B, y así sucesivamente.

A B C
1 2 3 4

Características

• Es un grafo, o sea, un conjunto de puntos (nodos) unidos por flechas.


• Representa las relaciones entre las tareas del proyecto, no su distribución
temporal.
• Las flechas del grafo corresponden a las tareas del proyecto.
• Los nodos del grafo, representado por círculos o rectángulos, corresponden
a instantes del proyecto. Cada nodo puede representar hasta dos instantes
distintos, el inicio mínimo de las tareas que parten del nodo y el final
máximo de las tareas que llegan al mismo.
• Es una herramienta de cálculo, y una representación visual de las
dependencias entre las tareas del proyecto.

Página 24
A continuación se detallan los Tipos de relaciones existentes:

a) Relación lineal

A B

1 2 3

b) Relaciones que crean Convergencia:

1
A

B D
2 4 5
C

c) Relaciones que crean Divergencia

3
B

A C
1 2 4
D

Página 25
Entre los sucesos se pueden crear convergencias, o divergencias, o ambas.
Una vez construido el grafo completo del programa se numeran cada uno de
los sucesos.
Para ello, si el grafo está bien dibujado por niveles, se irán numerando sus
nodos desde 1 en adelante, de izquierda a derecha, y en un mismo nivel de
arriba a abajo, de modo que si para una actividad el suceso inicial es el i y el
final es el j, se cumple siempre que i < j:

Representación de una actividad

Actividad
i j

De este modo, para las actividades anteriores de un suceso se cumplirá que


todos ellos tienen número de suceso menor.

Actividades Ficticias

A C E
1 2 3 4
D

3
B F1

A C E
1 2 5 6

F2
4

Página 26
La elaboración del grafo PERT de un programa implica la construcción del
cuadro de prelaciones formado por dos columnas:

• En la primera, se indican todas las actividades una a una.


• En la segunda, se indican las actividades inmediatamente anteriores a ésta.

Siempre supondremos que habrá un único suceso inicio y otro suceso fin de
proyecto, que se averigua de las siguientes formas:

a) Conocido el cuadro de prelaciones, del suceso inicio del proyecto partirán las
actividades que no tengan anteriores.

b) En el suceso fin del proyecto finalizarán aquellas actividades que luego no


aparezcan como anteriores.

A CONTINUACIÓN SE DESARROLLA UN PEQUEÑO EJEMPLO DE CÓMO


DIBUJAR UN PROYECTO

• A y B comienzan a la vez
• D, E y F empiezan tras haber finalizado A
• C empieza al terminar B
• G empieza al acabar C y F

Para construir el grafo PERT, lo más sencillo suele ser construir el cuadro de
relaciones formado por 2 columnas:

• En la primera, se indican todas las actividades una a una


• En la segunda indicamos las actividades anteriores a ésta

ACTIVIDAD ANTERIORES
A -----------------
B ------------------
C B
D A
E A
F A
G C,F

Página 27
Dibujando el PERT en pasos sucesivos iríamos obteniendo las fases
siguientes:

Se dibuja el suceso inicio y las dos actividades de partida

A la actividad A le seguirán las actividades que tengan A en la columna


anteriores, que en nuestro caso son D,E y F. De igual modo a la actividad B le
seguirá la C

Página 28
D

E
A

F
B

La actividad G sigue a las actividades F y C.

E
A
F

B
2
=
G

Página 29
Finalmente, puesto que D, E y G no aparecen en la columna "anteriores", son
las actividades que terminan en el suceso final del programa:

D
A E

B F

2
=
G
C

Pero el grafo anterior presenta dos actividades paralelas, la D y la E, lo que


debemos solucionar añadiendo una actividad ficticia.

Actividades Ficticias

Las actividades ficticias son actividades no reales que surgen como necesidad
de representar ciertas situaciones en un grafo. No consumen ni tiempo ni
recursos. Las representamos con línea de puntos.
Se utiliza cuando hay actividades en paralelo.

Página 30
En nuestro caso, detrás de la D añadimos un nuevo suceso con su actividad
ficticia, resultando finalmente el grafo de la siguiente figura.

D
F1
A E

F
B
G

Numerando los nodos de izquierda a derecha y, si hay varios en un mismo


nivel, de arriba abajo tendremos como resultado la siguiente figura

D=1
2 4 F1
6 =
A= E= 0
3

6
F

1
=

=2
4

B=
4 G

C=2
3 5

Página 31
Formulas para cálculos de tiempo early (temprano) y tiempo last (tardío)

Tiempo Early: es el menor tiempo que se puede emplear para llegar a ese
suceso. El suceso inicio del proyecto tendrá tiempo early nulo, para el resto es
el resultante de:

t(j) = max [t(i) + t(i,j)

Tiempo Last: Es el mayor tiempo que se puede emplear hasta llegar a ese
suceso para que la duración del proyecto no se retrase.
El suceso final del proyecto tendrá tiempo last igual a su tiempo early. Para los
restantes nodos se calculará mediante:

t'(i) = min[t'(j) - t(i,j)]

Representación de los tiempos Early y Last en un nodo

Tiempo Last
Tiempo Early

Número de suceso

HOLGURAS Y CAMINO CRÍTICO

Holgura de un suceso: es la figura entre el tiempo last y tiempo early


H(i) = t'(i) - t(i)

Holgura de una actividad: es igual al tiempo last del suceso final menos el
tiempo early inicial menos el tiempo de la actividad
HA(i,j) = t'(j) - t(i) - t(i,j)

Indica el tiempo que puede retrasarse una actividad sin retrasar el proyecto

Camino crítico: Va del suceso inicial al suceso final y viene determinado por
aquellas actividades que son CLAVE para que el proyecto total no se retrase.

Página 32
Calculo de los tiempos early y last

D=1
6 6 6+1
7 12
0+6
2 4 F1
6 =
A= E= 0
7+
3 0
6+
3
6-6
12 12
0 0

F
6

=
1 +2

4
10
B=
8-4
4 =2

6+
0+4 G

4
4 8 C=2 4+2
10 10
3 5

Los pasos a seguir son:

1. Marcar los nodos cuyo tiempo early sea igual a su tiempo last
2. Investigar posibles caminos que puedan unir los nodos anteriores,
marcando aquellas actividades cuya holgura sea nula.

D=1
6 6 6+1
7 12
0+6
2 4 F1
6 =
A= E= 0
7+
3 0
6+
3
6-6
12 12
0 0
F

6
=

1 2
4

+
10
B=
8-4
4 =2
6+

0+4 G
4

4 8 C=2 4+2
10 10
3 5

Página 33
Capítulo 5

Las Herramientas

De Modelado
HERRAMIENTAS DE MODELADO

ANÁLISIS FUNCIONAL: Primero cabe aclarar que existen diferentes maneras


de hacer el estudio de un sistema. De todas ellas, ahora vamos hacer hincapié
en la que considera un grupo de funciones asociadas para lograr un
determinado fin.
Vamos a utilizar lo que se denomina CRITERIO TOP-DOWN. Consiste en
concentrar la atención en el conjunto total del problema en estudio hasta
haberlo comprendido (Para esto resulta útil la confección de un Diagrama de
contexto). Recién entonces, se avanza en el trabajo para comenzar a ocuparse
de los detalles, lo que se logra a costa de perder esa visión de conjunto (El
DFD (Diagrama de flujo de datos ya puede resultar interesante en esta etapa.)

DIAGRAMA DE CONTEXTO

El diagrama de contexto establece los límites de información entre lo que se


está implementando en el sistema y el entorno en el que va a funcionar. En
esencia muestra la interacción entre el sistema y su entorno externo (contexto).

"La primer representación que siempre conviene hacer es el diagrama de


contexto" Decimos esto porque el primer esfuerzo debe estar dedicado a
asesorar al usuario que toma la más alta decisión (Gerente general).

Si dicho diagrama resulta aprobado, recién entonces valdrá la pena hacer el


esfuerzo de continuar con el trabajo que, en este caso, consiste en realizar un
DFD, esta vez con un nivel más de detalle.

Comenzamos nuestro estudio del diagrama de contexto examinando cada uno


de sus componentes

CONVENCION DE SIMBOLOS (COMPONENTES DEL D.C.)

a-
1 nombre
Nombre
Elemento Nombre
Externo Sistema

ENTIDAD FLUJO DE
EXTERNA SISTEMA DATOS

Página 34
ENTIDAD EXTERNA

Identificación
Letra minúscula que
Identifica a la EE

aa

Cliente
Cliente Descripción
Nombre de la EE

Si tengo que repetir


una entidad la voy a
Esta línea no se dibuja cruzar con una línea
cuando la EE es única, pero en el ángulo inferior
Sí, si se encuentra duplicada
derecho

PROCESO

Número del proceso.


En el DC es un cero.

“No puede existir


un D.C. con más
de un proceso.
0 Automáticamente
se asocia 1
proceso a un
Nombre
Representa a mi sistema sistema. Si tengo
del 2, significa 1que
Sistema tengo 2 sistemas
diferentes”

Nombre del Sistema

Página 35
FLUJO DE DATOS

• Es información en
movimiento, que va de un
punto a otro
• Tiene un origen y un
destino
• Dos flujos de datos con el
mismo nombre llevan la
misma información

ctivador

Flujo de Datos

DEFINICIÓN DE CADA COMPONENTE DEL DIAGRAMA DE CONTEXTO

ENTIDAD EXTERNA

Las entidades externas son una persona o un grupo, o departamento que esté
dentro de la misma compañía u organización, pero fuera del control del sistema
que se está modelando y con las cuales el sistema se comunica.

Se los nombra con un sustantivo (CLIENTE, SISTEMA DE COMPRAS, ETC.) y


se los indica con una letra minúscula, ubicada en su ángulo superior izquierdo.

Existen 3 cosas importantes que debemos recordar acerca de las entidades


externas

1. Son externos al sistema que se está modelando. Los flujos datos que
conectan al terminador con el sistema representan la interfaz entre él y el
mundo externo
2. La entidad externa está fuera del dominio del cambio, es decir, el analista
no tiene posibilidades de cambiar los contenidos de un terminador o la
manera en la que trabaja.
3. Las relaciones que existan entre los terminadores no se muestran en el DC.
Pudiera existir de hecho, diversas relaciones, pero, por definición no son
parte del sistema que se está estudiando.

Página 36
PROCESO

En el Diagrama de Contexto se dibuja un único proceso que representa a mi


sistema.
No puede existir un D.C. con más de un proceso. Automáticamente se asocia 1
proceso a un sistema. Si tengo 2, significa 1que tengo 2 sistemas diferentes.

FLUJOS DE DATOS

• Un flujo de datos se representa gráficamente por medio de una flecha. En el


Diagrama de Contexto esta flecha va desde una entidad externa hacia el
sistema o llega desde una entidad externa al sistema.

• Se los nombra con un sustantivo. El nombre representa el significado del


paquete que se mueve a lo largo del flujo.

• Manifiestan las relaciones entre elementos externos. Estas relaciones


estarán dadas por los datos que circulan para comunicarlos

• Jamás puede haber flujos de datos que vinculen a elementos externos entre

TABLA DE EVENTOS

EVENTO: un evento es todo aquello que ocurre afuera de mi sistema y mi


sistema tiene que dar respuesta a eso

Si pasa afuera de mi sistema yo me tengo que enterar, alguien me pide algo a


lo que tengo que dar una respuesta.

Cada uno de esos eventos va a disparar un proceso de mi sistema destinado a


devolver esa información que me están pidiendo.

ESTÍMULO: es puntualmente lo que hace reaccionar al sistema

Para modelar los eventos de mi sistema voy a usar una “tabla de eventos” cuyo
diseño es el siguiente

Tipo de Entidad Nombre Flujos de Flujos de Función


Evento Entrada Salida Principal
------ -------- ---------- ----------- ----------- -----------
Externo Cliente Realiza Solicitud Pedido
pedido pedido cliente

Página 37
ELEMENTOS DE LA TABLA DE EVENTOS

• Tipo de evento

Externo: Cuando puedo identificar la entidad que lo esta generando. Si un


cliente solicita un pedido sería externo

Temporal: Se definen como evento temporal aquellos cuyo disparador es el


tiempo. Todas aquellas cosas que mi sistema tiene que procesar cada
determinado período de tiempo obligatoriamente, es decir, “por tiempo”.
Ejemplo: Todos los 31 de diciembre hago un balance”

No existe una entidad externa que dispare ese proceso temporal y “si no tengo
un ente que me solicita algo no tengo un flujo de entrada”.

Un proceso temporal se dispara con el tiempo y no necesita información


adicional para ejecutarlo. No está a la espera de información.

• Entidad

Nombre de la entidad utilizada en el diagrama de contexto. Si un cliente solicita


un pedido sería: Cliente

• Nombre

Explicación con palabras propias de la causa completa que esta ocurriendo

• Flujo de Entrada

Información que recibe el sistema y la necesita para trabajar

• Flujo de Salida

El resultado de la transformación de información. Coincide con el nombre


exacto utilizado en el Diagrama de Contexto.

• Función Principal

Voy a identificar un proceso que a partir de esa entrada genera una salida. Es
una acción que tiene que realizar mi sistema para responder al ente en base a
la entrada.

Página 38
DIAGRAMA DE FLUJO DE DATOS:

Esta herramienta permite visualizar un sistema como una red de procesos


funcionales, conectados entre sí por "flujos de datos" y "demoras".

El diagrama de flujo de datos es una de las herramientas más comúnmente


utilizadas, sobre todo por sistemas operacionales en los cuales las funciones
del sistema son de gran importancia y son más complejas que los datos que
éste maneja.
Se refina el diagrama de contexto considerando con más detalle la función del
sistema. Es decir, se definen subsistemas principales que permiten el
funcionamiento del sistema considerado en el D.C.

CONVENCION DE SIMBOLOS

a-
1
Nombre D1 Nombre
Nombre
Elemento Demora
Proceso
Externo

ENTIDAD PROCESO FLUJO DE DEMORA


EXTERNA DATOS

ENTIDAD EXTERNA

Identificación
Letra minúscula que
Identifica a la EE

aa

Cliente
Cliente Descripción
Nombre de la EE

Esta línea no se dibuja


cuando la EE es única, pero
Sí, si se encuentra duplicada

Página 39
PROCESO

Número del proceso.


En el DC es un cero.
En el DFD es la correlación
de los procesos

Ingresar
Solicitud

Nombre del proceso


Es una acción ya que es un
proceso

FLUJO DE DATOS

Flujo Activador

Flujo de Datos

Página 40
DEMORA

Esta línea simple se convierte en doble


Cuando existen duplicados de la misma
demora. Tanto la original como los duplicados

D1 TARIFAS

Nombre de la demora
Es el nombre identificativo
de lo que representa esta
estructura

Número de la demora.
Lleva la letra ‘D’ seguida
del número de la demora

DEFINICION DE CADA COMPONENTE DEL DFD

ELEMENTO EXTERNO O TERMINADOR:

Este concepto coincide con la definición del mismo para el Diagrama de


Contexto.

PROCESO

Los elementos propios del sistema son funciones, pero se los llamará
procesos. Los sinónimos comunes son burbuja, función o transformación.

"La finalidad de un proceso es transformar entradas en salidas". El proceso


muestra una parte del sistema que transforma entradas en salidas, es decir,
muestra cómo es que una o más entradas se transforman en salida.

• El proceso se representa gráficamente como un círculo.


• Se los nombra con un verbo en infinitivo que actúa sobre un sustantivo. El
nombre del proceso debe describir lo que hace, por ejemplo, VENDER
LIBROS, VERIFICAR EXISTENCIA, ETC.
• Las relaciones entre los procesos están dadas por los datos que circulan
para comunicarlos. Se manifiestan mediante flujos de datos.

Página 41
FLUJOS DE DATOS

El concepto es exactamente el mismo que para Diagrama de Contexto, pero se


requieren algunas ampliaciones debido a la existencia de los procesos.

☺ Un flujo de datos se representa gráficamente por medio de una flecha que


entra o sale de un proceso.

☺ Manifiestan las relaciones entre elementos externos y elementos


propios entre sí. Estas relaciones estarán dadas por los datos que circulan
para comunicarlos

☺ Un flujo de datos es una comunicación inmediata, instantánea. A


veces, se hará necesario mostrar que las comunicaciones los datos se
deben desfasar en el tiempo, por algún tipo de necesidad concreta. Para
lograrlo se usará el concepto de demora que se describirá más adelante.

El nombre del flujo de datos representa el significado del paquete que se


mueve a lo largo del flujo.

El analista no debe dar al flujo un nombre como MANZANAS Y NARANJAS Y


POMELOS. En su lugar se puede ver un único flujo llamado frutas. Como
veremos, esto requerirá de alguna explicación en el diccionario de datos, que
discutiremos más adelante.

EJEMPLO

AZUCAR

PASTEL
HORNEAR
PASTEL
LECHE

Los datos que se mueven a lo largo de dicho flujo viajarán ya sea a otro
proceso (como entrada) o a un almacén o a un terminador.

Los flujos de datos también muestran la dirección: una cabeza de flecha en


cualquier extremo del flujo indica si los datos se están moviendo hacia adentro
o hacia fuera de un proceso.

Página 42
DEMORA o ALMACEN

☺ Se utiliza para mostrar que las comunicaciones de los datos se deben


desfasar en el tiempo. Representa datos en reposo.

☺ Se trata de la interrupción momentánea del viaje de los datos, por lo tanto,


éstos no deben perderse o inventarse en esa instancia.

☺ Si a una demora llega un sólo flujo de datos y sale uno sólo; ambos flujos
de datos deben ser el mismo.

☺ La demora detiene el proceso hasta que el mismo necesite de la


información que ella contiene para poder funcionar

☺ Se le da un nombre con las mismas características que al flujo de datos,


pero cuidando que no coincida con el del flujo, para que siempre se pueda
mantener la relación biunívoca entre sujeto y nombre. Una buena práctica es
utilizar el mismo nombre del flujo de datos, pero en plural.

☺ Se lo indica con la letra D seguida de un número ubicado dentro del


símbolo, a partir de su lado vertical único.

Detalles de este componente

☺ Para el analista con conocimientos de proceso de datos es tentador


referirse a las demoras como base de datos. De hecho, es así como a menudo
se implementan los almacenes en un sistema computarizado.

☺ Las demoras se conectan por flujos a los procesos. Así, el contexto en el


que se muestra un almacén en un DFD es uno de los siguientes:

• Un flujo desde un almacén


♦ Un flujo desde un almacén hacia el proceso significa que el proceso
necesita utilizar información existente en la demora.

• Un flujo hacia un almacén.


Un flujo hacia una demora significa alguna de las siguientes situaciones
♦ Se está guardando nueva información en la demora o almacén
♦ Se está borrando o retirando información de la demora o almacén
♦ Se está modificando o cambiando información

☺ Un punto que debería ser evidente es que los flujos conectados a un


almacén sólo pueden transportar paquetes de información que el almacén sea
capaz de guardar. Por ello, un flujo conectado a un almacén CLIENTES sólo
puede transportar información relacionada con los clientes contenidos por el
almacén; no puede transportar paquetes de inventarios paquetes de
manufactura o datos astronómicos.

Página 43
INTEGRACION DE DIAGRAMA DE CONTEXTO Y DIAGRAMA DE FLUJO
DE DATOS

A través de esta herramienta el profesional de sistemas se comunica con sus


usuarios.
Existen diversos tipos de usuarios, por lo que la herramienta debe ajustarse,
según a cuál de ellos estuviera referida. Es decir, se debe ajustar la
herramienta a la necesidad del usuario.

a) El primer esfuerzo debe estar dedicado a asesorar al usuario que toma la


más alta decisión (ej. Gte. Gral.). Este necesita saber con qué miembros del
medio ambiente en que opera el sistema tiene que relacionarse, a fin de
solucionar los problemas políticos habituales, así como por medio de qué tipo
de datos. (necesita conocer la relación del sistema con su contexto).
O sea que la primera herramienta que conviene utilizar es el DIAGRAMA DE
CONTEXTO.

b) El diagrama de contexto (que es el requerido por el usuario) no alcanza


para que se trabaje con él a nivel sistema. Ello obliga a desarrollar luego otro
diagrama que sí especifica qué es lo que el sistema hace: DIAGRAMA DE
FLUJO DE DATOS. Este diagrama va a mostrar, ahora sí, el detalle del
contenido del sistema, así como sus elementos externos.

c) Con el mismo criterio se hace evidente que puede haber otros usuarios para
los cuales este nivel de detalle ya no resulta suficiente; para ellos se deberán
producir otros niveles de DFD, de mayor grado de detalle todavía, hasta llegar
a una situación satisfactoria. (Se pasa del diagrama de sistema a otro diagrama
más minucioso)

DE LO ANTERIOR, ENTONCES SURGEN LOS SIGUIENTES NIVELES.

• NIVEL 0: DIAGRAMA DE CONTEXTO (Es anterior al de sistema)

• NIVEL 1: DIAGRAMA DE SISTEMA: Es el primero que muestra todo el


sistema y su entorno

• NIVEL N: EXPLOSION DE PROCESOS. Diagrama de mayor nivel de


detalle: resultan de una expansión de procesos previos.

Página 44
GUIA PARA LA CONSTRUCCION DE UN DFD

Armados con los cuatro componentes que forman un DFD estamos listos para
comenzar a entrevistar a los usuarios y a construir modelos de DFD de
sistemas.

Sin embargo, existe un número de reglas adicionales que se requieren para


poder utilizar DFD con éxito.
Algunas de las reglas tienen la finalidad de ayudarle para que dibuje un DFD
grato a la vista, y que, por lo tanto, tenga más probabilidades de que lo lea con
cuidado el usuario.

Las reglas son:

• Escoger nombres con significado para los procesos, flujos, demoras


(almacenes) y entidades externas (terminadores).

• Numerar los procesos

• Re-dibujar el DFD tantas veces como sea necesario estéticamente

• Evitar los DFD excesivamente complejos

• Asegurarse de que el DFD sea internamente consistente y que también lo


sea con cualesquiera DFD relacionados con él

• Escoger nombre significativos para los procesos, flujos, demorar


(almacenes) y agentes externos (terminadores)

DFD POR NIVELES

Se deben evitar DFD de una gran cantidad de procesos y confusos. El


problema que se nos presenta es que en proyectos reales los DFD que
veremos son considerablemente mayores y complejos.

La técnica sugiere que debe evitarse esto, pero, ¿cómo puede evitarse el tipo
de DFD confuso cuando en la realidad cuento con una gran cantidad de
procesos?

La respuesta es organizar el DFD global en una serie de niveles de modo que


cada uno proporcione sucesivamente más detalles sobre una porción del nivel
anterior.

El primer nivel de DFD consta sólo de una burbuja que representa el sistema
completo. Es lo que hemos dado en llamar DIAGRAMA DE CONTEXTO.

El DFD que sigue del diagrama de contexto se conoce como NIVEL 1.


Representa las principales funciones del sistema, al igual que sus principales
interfaces.

Página 45
Los números también sirven como una manera adecuada de relacionar una
burbuja con el siguiente nivel del DFD que la describe más a fondo.

☺ Por ejemplo el proceso 2 se asocia con un DFD inferior conocido como


NIVEL 2. Los proceso del nivel 2 se numeran 2.1, 2.2, 2.3, etc.

DIAGRAMA DE CONTEXTO

1 2

2.1 3 4
2.2

2.3 NIVEL 1

2.4

NIVEL 2

LUEGO DE LA EXPLICACIÓN SEREMOS CAPACES DE COMPRENDER


LAS SIGUIENTES AFIRMACIONES

Es importante tener en cuenta que las mismas sólo hacen referencia a un tema
de nomenclatura para poder distinguir la misma frente a la lectura de diferentes
autores.

☺ Los elementos propios del sistema son funciones, pero se los llamará
procesos.

☺ Proceso: es un mecanismo interno con la suficiente complejidad como para


que pueda descomponerse en varias funciones

☺ Función: mecanismo que no necesita subdividirse

Página 46
DIAGRAMA ENTIDAD-RELACION (D.E.R)

El Modelo de Entidad Relación es un modelo de datos basado en una


percepción del mundo real que consiste en un conjunto de objetos básicos
llamados entidades y relaciones entre estos objetos, implementándose en
forma gráfica a través del Diagrama Entidad Relación.

El diagrama de entidad-relación es un modelo de red que describe con un alto


nivel de abstracción la distribución de datos almacenados en un sistema.

Basándose en la información presentada por el DER, el grupo de


administración de base de datos puede ver las bases de datos a definir y el tipo
de claves que necesitará definir para llegar de manera eficiente a los registros
de las bases de datos.

MODELO CONCEPTUAL DE DATOS


LOS COMPONENTES DE UN DER

•ENTIDADES

•RELACIONES

•CARDINALIDAD

•MODALIDAD

•ATRIBUTOS

Página 47
Se puede definir como ENTIDAD a cualquier objeto, real o abstracto, que
existe en un contexto determinado o puede llegar a existir y del cual deseamos
guardar información.

MODELO CONCEPTUAL DE DATOS


ENTIDADES

"Ideas de las que debo guardar información para poder


comprender el negocio"

"Toda aquella información de la cual el negocio quiere


tener memoria"

Pueden ser personas, lugares, cosas, eventos y se


representan por medio de una caja rectangular

Ejemplos: Cliente, Proveedor, Artículo, Pedido, Venta.

Cliente Artículo

Se entiende por RELACION a la asociación entre 2 o más entidades

MODELO CONCEPTUAL DE DATOS


RELACIONES

• “Los objetos / entidades se conectan entre sí mediante


relaciones”
• “Vinculaciones entre las Ideas”

Una relación representa un conjunto de conexiones


entre objetos / entidades

Las relaciones se identificarán como Rn donde n es un


número único. Ejemplo R1, R2, R8

R8
Cliente Artículo

Página 48
Es importante reconocer que cada instancia de la relación representa una
asociación entre cero o más ocurrencias de un objeto y cero o más ocurrencias
del otro.
compra
CLIENTE ARTICULO

En esta figura la relación etiquetada como compra puede contener las


siguientes instancias

Instancia 1: el cliente 1 compra el artículo 1


Instancia 2: el cliente 2 compra el artículo 2 y 3
Instancia 3: el cliente 3 compra el artículo 4
Instancia 4: el cliente 4 compra el artículo 5, 6 y 7
Instancia 5: el cliente 5 no compra ningún artículo
Instancia 6: los clientes 6 y 7 compran el artículo 8
Instancia 7: el cliente 8,9, 10 compran los artículos 9, 10 y 11

Todo esto se muestra mediante el uso de una relación junto con la cardinalidad
y modalidad en la relación

MODELO CONCEPTUAL DE DATOS


CARDINALIDAD
Cardinalidad
Número de instancias de una entidad que se pueden relacionar con
un número de instancias de otra entidad

• Relación Uno a Uno: Cuando una instancia de una entidad sólo Uno a Uno
puede estar relacionada con una única instancia de otra entidad
viceversa.

• Relación Uno a Muchos: Cuando una instancia de una entidad Uno a Muchos
(entidad 2) sólo puede estar relacionada con una única instancia de
la otra entidad (entidad 1) y una instancia de la entidad 1 puede
tener más de una instancia relacionada en la entidad 2.

• Relación Muchos a Muchos: Cuando una instancia de una entidad


Muchos a Muchos
puede estar relacionada con más de una instancia de la otra
entidad y viceversa. En este caso las dos entidades no deben estar
relacionadas directamente, se tiene que añadir una nueva entidad
entre las dos que incluya los pares de valores relacionados entre
sí.

Página 49
EJEMPLOS COMPLETOS

MODELO CONCEPTUAL DE DATOS


RELACIONES

Cardinalidad

Tiene
Uno a uno Buque Capitán
Es asignado

Tiene
Uno a Muchos Cliente Factura
Pertenece

Muchos a Muchos Materia Es cursada


Alumno
Ha cursado

MODELO CONCEPTUAL DE DATOS


MODALIDAD

Modalidad

• Cantidad mínima de instancias de una entidad que se


relaciona con otra entidad.

• Indica si una instancia debe participar en la relación

Obligatoria

Opcional

Página 50
EJEMPLOS COMPLETOS

MODELO CONCEPTUAL DE DATOS


RELACIONES

Modalidad
Cantidad mínima de instancias de una entidad que se relaciona
con otra entidad.
Indica si una instancia debe participar en la relación

Obligatoria Buque Capitán Obligatoria

Obligatoria Cliente Factura Opcional

provee
Opcional Proveedor Artículo Opcional
Es provisto por

MODELO CONCEPTUAL DE DATOS


RELACIONES

Modalidad
•Cantidad mínima de instancias de una entidad que se relaciona
•con otra entidad.
•Indica si una instancia debe participar en la relación

Obligatoria Buque Capitán Obligatoria

Obligatoria Cliente Factura Opcional

provee
Opcional Proveedor Artículo Opcional
Es provisto por

Página 51
EJEMPLIFICACION Y LECTURA

MODELO CONCEPTUAL DE DATOS


RELACIONES

RELACIONES UNO A UNO

Relación Uno a Uno


CARDINALIDAD
Relación Uno a Muchos
Relación Muchos a Muchos

DEPTO PROFESOR

DEPTO PROFESOR NAT Adriana

HSC Claudio

TEC Alejandra
Relación Obligatoria
Christian
MODALIDAD Relación Opcional
Agustina

• Todo Departamento tiene solamente un Profesor a cargo


• Un Profesor puede ser jefe de un solo Departamento

MODELO CONCEPTUAL DE DATOS


RELACIONES

RELACIONES UNO A MUCHOS

r1
CURSO ALUMNO

Adriana
Primer Año – A Claudio
Primer Año – B Alejandra
Segundo Año - A Christian
Agustina

• Un Curso tiene muchos alumnos


• Un Alumno esta en un solo curso

• Un curso puede estar transitoriamente vacío


• Todo Alumno tiene un Curso Asignado

Página 52
MODELO CONCEPTUAL DE DATOS
ATRIBUTOS

• Características particulares del negocio que


permiten definir y conocer una idea (entidad)

• El atributo pertenece a una única entidad.

Ejemplos

Cliente Artículo

Código cliente Código artículo


Nombre cliente Descripción del artículo
Dirección cliente Precio artículo
TE cliente

MODELO CONCEPTUAL DE DATOS


RELACIONES

☺ PARTICION RELACION DE MUCHOS A MUCHOS

☺ SUPER-TIPO/ SUB-TIPO

☺ EXCLUYENTES

Página 53
MODELO CONCEPTUAL DE DATOS
PARTICION RELACION DE MUCHOS A MUCHOS

Muchos a Muchos
r1

Materia Alumno

Resultado

r1
Materia Alumno

r1 R2

EXAMEN

MODELO CONCEPTUAL DE DATOS


PARTICION RELACION DE MUCHOS A MUCHOS
Muchos a Muchos
R1

PROFESOR CURSO
PROFESOR CURSO

Adriana Primer Año – A

Claudio Primer Año – B

Alejandra Segundo Año - A

Christian

Agustina
• Un Profesor puede estar asignado en varios Cursos
• Un Curso puede tener muchos Profesores asignados

• Todo Profesor tiene un Curso Asignado


• Un Curso puede no tener transitoriamente un Profesor

Página 54
MODELO CONCEPTUAL DE DATOS
PARTICION RELACION DE MUCHOS A MUCHOS

ROMPER LA RELACION MUCHOS A MUCHOS


PROFESOR ASIGCURSO CURSO

Adriana Adriana Primer Año - A Primer Año – A

Claudio Claudio Segundo Año - A Primer Año – B

Alejandra Alejandra Primer Año – A Segundo Año - A

Christian Christian Primer Año – A

Agustina Christian Segundo Año - A

Agustina Segundo Año - A

EL DIAGRAMA ENTIDAD RELACION SERIA

PROFESOR ASIG CURSO CURSO

Página 55
MODELO CONCEPTUAL DE DATOS
SUPER-TIPO / SUB-TIPO

• Todas tienen el mismo identificador


• Existen atributos comunes en super-tipo y diferentes en el
sub-tipo
• Existe un atributo discriminador

Cliente
R1 R2

Cliente Cliente
Mayorista Minorista

MODELO CONCEPTUAL DE DATOS

RELACIONES EXCLUYENTES

Dos relaciones son excluyentes cuando se da el caso en que si se produce una no


se produce la otra.

Cliente
R1 R2

Cliente Cliente
Mayorista Minorista

Página 56
DICCIONARIO DE DATOS (D.D)

La importancia del diccionario de datos a menudo pasa de largo, pero la


realidad es que el modelo de los requerimientos del usuario no puede
considerarse completo. Sin el diccionario de datos todo lo que se tendría es un
borrador rudimentario.

El diccionario de datos es un listado organizado de todos los datos pertinentes


al sistema, con definiciones precisas y rigurosas para que tanto el usuario
como el analista tengan un entendimiento común de todas las entradas,
salidas, componentes de almacenes y cálculos intermedios.

COMPONENTES DE UN DICCIONARIO DE DATOS

• ENTIDAD
• RELACION
• ATRIBUTOS

NOTACIÓN DEL DICCIONARIO DE DATOS

ENTIDAD

Nombre (ENT)
Atributos
nombre
Rol: Identificador Simple
Parte del identificador
Descriptor

Tipo ocurrencia: Obligatorio


Opcional
Repetitivo

Relaciones

RELACION

Nombre Entidad A Nombre Entidad B


Nombre Relación para Entidad A Nombre Relación para Entidad B
Cardinalidad para Entidad A Cardinalidad para Entidad B
Modalidad para Entidad A Modalidad para Entidad B

ATRIBUTO

Nombre (ATR)
Tipo (Caracter, Numérico....)
Longitud
Valor por Defecto

Página 57
BALANCEO DE MODELOS

BALANCEO DER Y DFD

D.E.R.

Entidades: Es una idea. Es aquello de lo cual mi sistema debe tener


memoria

D.F.D.

Demoras: Representan la memoria del sistema

Tanto en una como en otra se habla de memoria del sistema, existe


una correspondencia

POR QUE EL BALANCEO DE AMBAS HERRAMIENTAS

Cada una de estas dos herramientas, como hemos visto, se enfocan en un


aspecto crítico del sistema a modelar. Es importante tener esto en mente, pues,
significa, que quien lee el modelo también está enfocando un aspecto crítico,
es decir, el aspecto al cual la herramienta de modelado está atrayendo su
atención.

Dado que el sistema tiene tantos grados de complejidad, se desea que el


diagrama de flujo de datos enfoque la atención del lector en las funciones del
sistema, sin permitir que las relaciones entre datos distraigan su atención y se
desea que el diagrama de entidad-relación enfoque la atención entre datos, sin
permitir distracción por las características funcionales.

Cuando se modelan aspectos distintos de un sistema (funciones y datos),


además de modelar las características del sistema en un diccionario de datos y
un conjunto de especificación de procesos, es fácil desarrollar diversas
interpretaciones diferentes e “inconsistentes” de esa misma realidad. Este es
un peligro muy grande ya que cualesquiera errores que existan tarde o
temprano se detectarán, pero se vuelven cada vez más difíciles y más caros
cuanto más avanza el proyecto.

Página 58
CÓMO BALANCEAR AMBAS HERRAMIENTAS

En el momento de reunir estas dos herramientas y aunque la visión que


presentan del sistema es muy distinta existen algunas relaciones que deben
darse para el sistema global sea consistente:

• Cada demora del DFD debe corresponderse con al menos una entidad en
el DER. Si existe una demora en el DFD que no aparece en el DER, algo
anda mal.

• Los nombres de las entidades del DER y los nombres de las demoras en
el DFD deben coincidir. La convención que seguimos fue utilizar la forma
plural (ejemplo: CLIENTES) en el DFD y la forma singular en el DER.

RESTRICCIONES

• Toda DEMORA (del DFD) tiene por lo menos una ENTIDAD (del DER)
adentro

• Una DEMORA puede tener más de una entidad

• Una ENTIDAD no puede estar en más de una DEMORA

EJEMPLO

Tiene
Factura Item Factura
Pertenece
(cabecera)

D1 FACTURAS

FORMA DE REPRESENTACIÓN

DEMORA ENTIDADES QUE INCLUYE


FACTURAS FACTURA
ITEM FACTURA

Página 59
NORMALIZACION

DEFINICION

La normalización es el proceso mediante el cual se transforman datos


complejos a un conjunto de estructuras de datos más pequeñas, que además
de ser más simples y más estables, son más fáciles de mantener.

También se puede entender la normalización como una serie de reglas que


sirven para ayudar a los diseñadores de bases de datos a desarrollar un
esquema que minimice los problemas de lógica. Cada regla está basada en la
que le antecede.

La normalización se adoptó porque el viejo estilo de poner todos los datos en


un solo lugar, como un archivo o una tabla de la base de datos, era ineficiente y
conducía a errores de lógica cuando se trataban de manipular los datos.

Las guías que la normalización provee crean el marco de referencia para


simplificar una estructura de datos compleja.

VENTAJAS

• El consumo de espacio; una base de datos normalizada ocupa menos


espacio en disco que una no normalizada.

• Hay menos repetición de datos, lo que tiene como consecuencia un mucho


menor uso de espacio en disco.

El proceso de normalización tiene un nombre y una serie de reglas para cada


fase.

Esto puede parecer un poco confuso al principio, pero poco a poco se va


entendiendo el proceso, así como las razones para hacerlo de esta manera.

Página 60
NOCIONES NECESARIAS PARA LUEGO PODER COMPRENDER EL
PROCESO DE NORMALIZACION

Estructura De Datos: conjunto de atributos que representan una idea.

Ej.
Cod. Cliente
Nombre Cliente
Dirección Cliente

Atributo: unidad mínima con significación de una estructura

Ej. Nombre cliente

Atributo Repetitivo: Atributo que toma n valores.

Ej. TE. Cliente *(1,n)

Forma De Identificar Un Grupo Repetitivo: Un grupo repetitivo es un


conjunto de atributos que se repiten n veces dentro de una entidad.

Ej. Cod. cliente


Nombre cliente
Tarjetas de crédito *(1,n)
Nro. Tarjeta
Nombre Tarjeta
Bco. Emisor
Vto. Tarjeta

Dependencia Funcional

Dado un par de atributos A y B, se dice que B depende funcionalmente de A, si


conociendo el valor de A, se puede determinar en forma unívoca el valor de B.

Ej.: DNI Nombre


DNI determina funcionalmente a Nombre, si DNI: 22.325.652
corresponde solamente a Juan José Pérez

Clave Candidata

Un atributo (simple o compuesto) es clave candidata de una estructura de


datos, si determina en forma UNIVOCA y MINIMA a la totalidad de la
estructura, es decir, si determina funcionalmente todos los atributos de la
estructura de datos

Cod. Cliente Clave Candidata


Tipo de Documento Clave Candidata
Nro de Documento
Razón Social

Página 61
Clave Principal

Es la única clave candidata elegida como clave principal, siguiendo algún


criterio particular, como por ejemplo reglas del negocio, decisión del cliente o
criterio particular

Cod. Cliente
Tipo de Documento Clave Candidata
Nro de Documento
Razón Social

Atributo No Clave

• Si no forma parte de ninguna clave candidata de la estructura en cuestión.


• En una estructura de datos determinada, si no participa en la formación de
ninguna clave candidata de dicha estructura. Por lo cual es un atributo
dependiente de la clave

Cod. cliente
Tipo de Documento
Nro de Documento
Razón Social

GRADOS DE NORMALIZACION

Existen básicamente tres niveles de normalización: Primera Forma Normal


(1NF), Segunda Forma Normal (2NF) y Tercera Forma Normal (3NF).
Expondremos también la Forma Normal de BOYCE Y CODD (BCNF). Cada
una de estas formas tiene sus propias reglas.

Cuando una base de datos se conforma a un nivel, se considera normalizada a


esa forma de normalización. No siempre es una buena idea tener una base de
datos conformada en el nivel más alto de normalización, puede llevar a un nivel
de complejidad que pudiera ser evitado si estuviera en un nivel más bajo de
normalización.

En la tabla siguiente se describe en que consiste cada una de las reglas

REGLA DESCRIPCION
Primera Forma Normal Una Estructura está en primera forma
normal (1FN) si y sólo si no tiene
atributos repetitivos.
Segunda Forma Normal Una estructura está en Segunda
Forma Normal (2FN) si y sólo sí se
precisa la totalidad de la clave
principal para determinar a cada uno
de los atributos que no pertenecen a
ella.

Página 62
REGLA DESCRIPCION
Tercera Forma Normal • Una Entidad está en Tercera
Forma Normal (3FN) si y sólo si no
existen dependencias funcionales
entre sus atributos no claves.

• Una estructura de datos esta en


Tercera Forma Normal si y sólo si no
existen atributos no claves que
determinan a otros atributos no
claves

Forma Normal De Boyce Y Codd Una entidad está en la Forma Norma


(BCNF) de BOYCE Y CODD (BCNF) si y sólo
sí todo determinante es clave
candidata.

Primera Forma Normal

La regla de la Primera Forma Normal establece que las columnas repetidas


deben eliminarse y colocarse en tablas separadas. “Incluye la eliminación de
todos lo grupos repetitivos”

Segunda Forma Normal

La regla de la Segunda Forma Normal establece que todas las dependencias


parciales se deben eliminar y separar dentro de sus propias tablas. Una
dependencia parcial es un término que describe a aquellos datos que no
dependen de la clave primaria de la tabla para identificarlos. “Una relación está
en segunda forma normal (2FN) solamente si todos los atributos son
dependientes en forma completa de la clave.”
Todos sus atributos que no son de la clave principal tienen dependencia
funcional completa respecto de todas las claves existentes en el esquema. En
otras palabras, para determinar cada atributo no clave se necesita la clave
primaria completa, no vale con una subclave.

Tercera Forma Normal (Dependencia Transitiva)

Una tabla está normalizada en esta forma si todas las columnas que no son
clave son funcionalmente dependientes por completo de la clave primaria y no
hay dependencias transitivas. Una dependencia transitiva es aquella en la cual
existen columnas que no son clave que dependen de otras columnas que
tampoco son clave.

Cada atributo que no está incluido en la clave primaria no depende


transitivamente de la clave primaria. Por lo tanto, a partir de un esquema en
2FN, tenemos que buscar dependencias funcionales entre atributos que no
estén en la clave.

Página 63
Boyce y Codd

La Forma Normal de Boyce-Codd es una versión ligeramente más fuerte de la


Tercera forma normal (3FN). La forma normal de Boyce y Codd requiere que
no existan dependencias funcionales no triviales de los atributos que no sean
un conjunto de la clave candidata.
Una tabla esta normalizada en BCNF si y solo si está en 3FN y cada
dependencia funcional no trivial tiene una clave candidata como determinante.
En términos menos formales, una tabla está en BCNF si está en 3FN y los
únicos determinantes son claves candidatas.

EJEMPLO

Para explicar con un ejemplo en que consiste cada una de las reglas, vamos a
considerar los datos de la siguiente estructura.

ALUMNOS

DNI-Alumno
Codigo-Curso
Apellido Alumno
Nombre Alumno
Dirección Alumno
Codigo-Provincia
Provincia
Telefono-alumno *(1,3)
Nota
Tutor
Asignatura

La estructura anterior no tiene ningún nivel de normalización porque ninguna de


nuestras reglas de normalización ha sido aplicada.

1ra. FORMA NORMAL

Según las reglas del Primer Nivel de Normalización debemos eliminar los
atributos / grupos repetitivos

En principio si comenzamos definiendo la estructura de una tabla como esta:

DNI Nombre_Alumno ………. TELEFONO_1 TELEFONO_2


12121212A Pedro 666-6666 777-7777
13131313A Ana 333-3333 222-2222
26262626A Sara 555-5555 888-8888

Cuando observamos los campos TELEFONO-1 y TELEFONO-2 nos damos


cuenta que cuando en nuestra aplicación necesitemos un tercer TELEFONO
debemos añadir otro campo a la tabla y en consecuencia debemos
reprogramar toda la entrada de datos de tu código

Página 64
Obviamente necesitamos crear un sistema funcional que pueda crecer y
adaptarse fácilmente a los nuevos requisitos y por lo tanto comenzamos
aplicando Primera Forma Normal

DNI Nombre Apellido-Alumno ………. TELEFONO


12121212A Pedro Fernández 666-6666
12121212A Pedro Fernández 777-7777
13131313A Ana García 333-3333
13131313A Ana García 222-2222
26262626A Sara Crespo 555-5555
26262626A Sara Crespo 888-8888

Esta tabla cumpliría con la primera forma normal y la solución de la estructura


sería la siguiente

1ra. FORMA NORMAL

ALUMNO AL-TELEFONO

DNI-Alumno DNI.Alumno
Codigo-Curso Telefono-alumno
Apellido Alumno
Nombre Alumno
Dirección Alumno
Codigo-Provincia
Provincia
Nota
Tutor
Asignatura

2da. FORMA NORMAL

La Segunda Forma Normal ocurre si se cumple la Primera Forma Normal y


solamente si todos los atributos son dependientes en forma completa de la
clave. Si hay atributos que dependen sólo de parte de la clave, entonces esa
parte de la clave y esos atributos formarán otra tabla.

DNI-Alumno Codigo-Curso Nombre-Alumno Apellido-Alumno ………. Nota


12121212A G1 Pedro Fernández 9
12121212A G2 Pedro Fernández 8
13131313A G1 Ana García 6
13131313A G2 Ana García 7
26262626A G1 Sara Crespo 6
26262626A G2 Sara Crespo 9

Página 65
El DNI-Alumno y Codigo-Curso forman la clave principal para esta tabla y sólo
la Nota tiene dependencia funcional completa. El nombre y el apellido
dependen solamente del DNI-Alumno.

Para solucionarlo quedaría:

ALUMNO
DNI-Alumno Nombre-Alumno Apellido-Alumno
12121212A Pedro Fernández
13131313A Ana García
26262626A Sara Crespo

AL-NOTA
DNI-Alumno Codigo-Curso Nota
12121212A G1 9
12121212A G2 8
13131313A G1 6
13131313A G2 7
26262626A G1 6
26262626A G2 9

Esta tabla cumpliría con la segunda forma normal y la solución de la estructura


sería la siguiente

2da. FORMA NORMAL

ALUMNO AL-NOTA AL-TELEFONO

DNI-Alumno DNI-Alumno DNI.Alumno


Apellido Alumno Codigo-Curso Telefono-alumno
Nombre Alumno Nota
Dirección Alumno
Codigo-Provincia
Provincia
Tutor
Asignatura

Página 66
3ra. FORMA NORMAL

Ocurre ahora que si cumple con la Segunda Forma Normal pero existe algún
atributo que depende funcionalmente de atributos que no son clave, no
estamos cumpliendo con las reglas de la 3ra FORMA NORMAL.

DNI-Alumno Nombre- Apellido- ……… Codigo- Provincia


Alumno Alumno Provincia
12121212A Pedro Fernández 34 Buenos Aires
13131313A Ana García 35 García
26262626A Sara Crespo 34 Buenos Aires

La Provincia depende funcionalmente del código de provincia, lo que hace que


no esté en Tercera Forma Normal.

El arreglo sería:

DNI-Alumno Nombre-Alumno Apellido-Alumno ……… Codigo-Provincia


12121212A Pedro Fernández 34
13131313A Ana García 35
26262626A Sara Crespo 34

Codigo-Provincia Provincia
34 Buenos Aires
35 García
34 Buenos Aires

Esta tabla cumpliría con la tercera forma normal y la solución de la estructura


sería la siguiente

3ra. FORMA NORMAL

ALUMNO PROVINCIA AL-NOTA AL-TELEFONO

DNI-Alumno Codigo-Provincia DNI-Alumno DNI.Alumno


Apellido Alumno Provincia Codigo-Curso Telefono-alumno
Nombre Alumno Nota
Dirección Alumno
Codigo-Provincia
Tutor
Asignatura

Página 67
BCNF

La Forma Normal BCNF ocurre si una tabla está en tercera forma normal y
además todo determinante es una clave candidata.

DNI-Alumno Asignatura Tutor


12121212A Programación II Adriana
12121212A Programación I Alejandra
13131313A Programación I Alejandra
26262626A Programación II Adriana

El propósito de la tabla es mostrar qué tutores están asignados a qué


estudiantes. Las claves candidatas de la tabla son:

• {Tutor, DNI-Alumno}
• {Asignatura, DNI-Alumno}

Esta tabla está en tercera forma normal, pero no en forma de Boyce-Codd.


Una forma sencilla de comprobar si una relación se encuentra en BCNF
consiste en comprobar, además de que esté en Tercera Forma Normal, lo
siguiente:

1) Si no existen claves candidatas compuestas (con varios atributos), está en


BCNF.

2) Si existen varias claves candidatas compuestas y éstas tienen un elemento


común, no está en BCNF.

En el ejemplo existen 2 claves candidatas compuestas y ambas comparten el


atributo DNI-Alumno por lo tanto no esta en BCNF.

La descomposición del esquema no es inmediata

La solución sería:

TUTORIAS
DNI-Alumno Tutor
12121212A Adriana
12121212A Alejandra
13131313A Alejandra
26262626A Adriana

TUTOR-ASIGNATURAS
Tutor Asignatura
Alejandra Programación I
Adriana Programación II

Esta tabla cumpliría con la Forma Normal BCNF y la solución de la estructura


sería la siguiente

Página 68
BCNF

ALUMNO PROVINCIA AL-NOTA AL-TELEFONO

DNI-Alumno Codigo-Provincia DNI-Alumno DNI.Alumno


Apellido Alumno Provincia Codigo-Curso Telefono-alumno
Nombre Alumno Nota
Dirección Alumno
Codigo-Provincia
Tutor

TUTORIAS

DNI-Alumno
Tutor
Asignatura

EJERCICIO CON SOLUCION DIRECTA

ESTRUCTURA ORIGINAL

ALUMNOS

DNI-Alumno
Codigo-Curso
Apellido Alumno
Nombre Alumno
Dirección Alumno
Codigo-Provincia
Provincia
Telefono-alumno *(1,3)
Nota
Tutor
Asignatura

1ra. FORMA NORMAL

ALUMNO AL-TELEFONO

DNI-Alumno DNI.Alumno
Codigo-Curso Telefono-alumno
Apellido Alumno
Nombre Alumno
Dirección Alumno
Codigo-Provincia
Provincia
Nota
Tutor
Asignatura

Página 69
2da. FORMA NORMAL

ALUMNO AL-NOTA AL-TELEFONO

DNI-Alumno DNI-Alumno DNI.Alumno


Apellido Alumno Codigo-Curso Telefono-alumno
Nombre Alumno Nota
Dirección Alumno
Codigo-Provincia
Provincia
Tutor
Asignatura

3ra. FORMA NORMAL

ALUMNO PROVINCIA AL-NOTA AL-TELEFONO

DNI-Alumno Codigo-Provincia DNI-Alumno DNI.Alumno


Apellido Alumno Provincia Codigo-Curso Telefono-alumno
Nombre Alumno Nota
Dirección Alumno
Codigo-Provincia
Tutor
Asignatura

BCNF

ALUMNO PROVINCIA AL-NOTA AL-TELEFONO

DNI-Alumno Codigo-Provincia DNI-Alumno DNI.Alumno


Apellido Alumno Provincia Codigo-Curso Telefono-alumno
Nombre Alumno Nota
Dirección Alumno
Codigo-Provincia
Tutor

TUTORIAS

DNI-Alumno
Tutor
Asignatura

Página 70
ESPECIFICACION DE PROCESOS

La definición de procesos se ocupa de establecer qué es lo que hace (o deberá


hacer) cada proceso del sistema; es lo que sucede en cada burbuja primitiva de
nivel más bajo de en un DFD.

Es una descripción detallada de la política de negocios del usuario que cada


burbuja lleva a cabo.
En esta instancia se "destapa" la última caja negra del DFD: SUS PROCESOS.

El objetivo de la definición de procesos es descomponer con un enfoque


TOP-DOWN la lógica del proceso.

Existe una variedad de herramientas posibles de utilizar para producir una


especificación de procesos, pero las más difundidas son: Lenguaje
Estructurado, Tablas de Decisión y Diagramas de Flujo.

LENGUAJE ESTRUCTURADO

Su objetivo consiste en eliminar el texto literario, de composición libre, que,


escrito por una persona, permite una interpretación subjetiva por parte de otra.
El lenguaje estructurado es una versión recortada, muy compacta, del lenguaje
común, con reglas de sintaxis altamente específicas que permite explicar
cualquier situación, pero de tal manera que sólo admita una única
interpretación por parte de su receptor: LA INTERPRETACION OBJETIVA.

Una frase en lenguaje estructurado puede consistir en una ecuación algebraica,


en una sencilla frase imperativa que consista en un verbo y un objeto.

Ecuación algebraica: X = (Y * Z) / (Q + 14)


Frase imperativa: CALCULAR X = (Y * Z) / (Q + 14)

También se pueden expresar cálculos como los siguientes:

• FIJAR IMPUESTO A 13
• SUMAR 3 A X
• MULTIPLICAR PRECIO UNITARIO POR CANITDAD
• DIVIDIR GANANCIAS ACTUALES ENTRE PERDIDAS ACTUALES

Los verbos deben escogerse entre un pequeño grupo de verbos orientados a la


acción tales como:

• CONSEGUIR • PONER
• ENCONTRAR • SUMAR
• RESTAR • MULTIPLICAR
• DIVIDIR • CALCULAR
• BORRAR • ENCONTRAR
• VALIDAR • MOVER
• REEMPLAZAR • FIJAR
• ORDENAR

Página 71
Se llega a la conclusión de que entre 40 o 50 verbos son suficientes para
describir cualquier política dentro de una especificación de proceso.

Los objetos deben consistir solo en datos que se han definido en el diccionario
o ser términos locales. Los términos locales son aquellos que se definen
explícitamente en una especificación de proceso individual; solo conocidos;
relevantes y con significado dentro de dicha especificación de proceso.

El lenguaje estructurado permite el uso de unas cuantas formas limitadas que


se toman de las construcciones acostumbradas en la programación
estructurada

> Selección Binaria

De acuerdo a las características de una situación dada se pueden plantear 2


situaciones: que una condición se cumpla (VERDADERA) o que no lo haga
(FALSA)

Si edad_del_cliente es mayor que 65


FIJAR cuota a cuota_anciano
Sino
FIJAR cuota a cuota_normal
Fin_Si

> Selección múltiple

Se utiliza en las situaciones donde según el valor de un atributo es necesario


optar por distintas acciones

HACER CASO
CASO edad-del-cliente < 13
FIJAR cuota a cuota_niños
CASO edad-del-cliente > 12 y edad-del-cliente < 20
FIJAR cuota a cuota-adolescente
CASO edad-del-cliente > 19 y edad-del-cliente < 65
FIJAR cuota a cuota-adultos
OTRO
FIJAR cuota a cuota-ancianos
FIN CASO

Página 72
> Iteración

La utilización de esta instrucción se da cuando existen acciones que se deben


reiterar

Hay dos situaciones a tener en cuenta:

1)

Mientras (condición) Hacer


-----------------
-----------------
Fin_Mientras

"Las acciones se van a ejecutar hasta que la condición se haga verdadera"

2)

Repetir
------------
------------
Hasta_que (Condición)

EJEMPLIFICACION PARA RECORRIDO DE DATOS

La especificación de proceso para examinar una secuencia de registros de


pedidos en almacén PEDIDOS, para calcular un diario sería:

Total_diario = 0

HACER MIENTRAS haya más pedidos en PEDIDOS con fecha_de_pedido = fecha


hoy

LEER el siguiente PEDIDO en PEDIDOS con fecha_de_pedido = fecha_de_hoy


MOSTRAR numero_de_pedido, nombre_del_cliente y cantidad_total
Total_diario = total_diario + cantidad_total

FIN MIENTRAS

MOSTRAR Total_diario

Página 73
LENGUAJE ESTRUCTURADO VS DER

Es posible también utilizar la especificación de procesos para la descripción de


alguna parte del DER.

> Selección Binaria

Si Cliente.Categoría Cliente = "Mayorista"


Factura.Fecha Vto Factura = Fecha del día + 7
Sino
Factura.Fecha Vto Factura = Fecha del día
Fin_Si

> Selección Múltiple

Hacer_casos Artículo.Rubro Artículo


Explosivo
Artículo. Descuento Artículo = 10 %
Inflamable
Artículo. Descuento Artículo = 10 %
Peligroso
Artículo. Descuento Artículo = 10 %
OTROS
Artículo. Descuento Artículo = 10 %
Fin_Hacer_Casos

> Asignación

Material.existencia = Entrega.Cant Artículo

- Como primer miembro de la igualdad se coloca el resultado que se quiere


lograr
- Como segundo miembro se pone el procedimiento necesario para conseguirlo

> Invocación a una función

Consiste en agrupar ideas. Es un conjunto de ideas que se corresponde con un


grupo de acciones identificado con un nombre en mayúsculas

Mientras atrib < 20


Hacer PEPE
FinMientras

PEPE
--------
--------
FIN PEPE

Página 74
> Asociación

Existen 2 situaciones

1) RELACIONAR <nombre ENT> Y <nombre ENT> CON <condición>

Ej. RELACIONAR <Localidad> y <Cliente> con <cod loc = 10 and cod-clie = 1>

Estoy diciendo que el cliente 1 vive en la localidad 10

2) ELIMINAR <nombre ENT> CON <nombre ENT>

LOCALIDAD CLIENTE

Para eliminar todos los clientes de la localidad 10

Mientras exista R1
SI cod-loc = 10
ELIMINAR <Localidad> CON <Cliente>
FIN-SI
Fin-Mientras
-----------------------------------------------------------------------------

Si existe R2 Entre Localidad y Cliente


------------------------
------------------------
Fin_si

Cuando pregunto si existe R2, no pregunto por la existencia de la relación. "LA


RELACION EXISTE SIEMPRE"
La pregunta de si existe la relación es a nivel de existencia de instancia; en
este caso sería ¿En la localidad "x" hay algún cliente?
Para poder preguntar debe existir modalidad opcional, sino la pregunta es
redundante porque "existe siempre".

Página 75
TABLAS DE DECISIÒN

El objetivo de una tabla de decisión es eliminar el texto literario en lo que


respecta al manejo de decisiones.

Una tabla de decisión ayuda al lenguaje estructurado y se la invoca igual que a


un procedimiento. Existen situaciones donde el lenguaje estructurado no es
adecuado para escribir especificaciones de proceso. Esto se da sobre todo si el
proceso debe producir alguna salida o tomar alguna acción basada en
decisiones complejas. Si las decisiones se basan en diversas variables
distintas.

Una tabla de decisión se crea definiendo condiciones y acciones separadas por


medio de una línea horizontal gruesa.

• Condición

Define las características de una situación dada y puede tomar diversos


valores. Si los valores que pueden tomar las variables son binarios (Verdadero
o Falso) nos encontramos frente a una tabla binaria, si por el contrario, nos
encontramos por ejemplo, con una variables “edad-del-cliente” cuyos valores
relevantes son “menos de 10”, “entre 10 y 30”, y “más” de 30 nos encontramos
frente a una tabla multivaluada.

• Acción

Es lo que debe hacerse ante una circunstancia determinada.

TABLA BINARIA

1 2 3 4
EDAD > 21 S S N N
PESO > 60 S N S N
MEDICAMENTO 1 X
MEDICAMENTO 2 X X X

Página 76
Si existen N variables con valores binarios (verdadero – falso), entonces
existirán 2n reglas distintas; así que si existen tres condiciones, habrá 8 reglas
que surgen de hacer 23. Al tratar el Verdadero como una S(Sí) y el Falso como
una N(No); como binario; es fácil generar una secuencia de SSSSNNNN para
la primer variable, SSNNSSNN para la segunda variable y finalmente una
secuencia de SNSNSNSN para la última variable obteniendo como resultado
las 8 combinaciones necesarias.

TABLA BINARIA CON 3 VARIABLES

En este caso, dado que para generar la secuencia se trata de valores binarios,
a la segunda variable denominada sexos en lugar de darle valores S(i) – N(o) le
damos valores M(asculino) – F(emenino) para que sean mas representativos.

1 2 3 4 5 6 7 8
EDAD > 21 S S S S N N N N
SEXO M M F F M M F F
PESO > 100 S N S N S N S N
MEDICAMENTO 1 X X X
MEDICAMENTO 2 X X
MEDICAMENTO 3 X X X
NINGUN MEDICAMENTO X X

TABLA MULTIVALUADA

1 2 3 4 5 6
EDAD < < = = > >
21 21 21 21 21 21
PESO > 60 S N S N S N
MEDICAMENTO 1 X X
MEDICAMENTO 2 X X X X

Página 77
DIAGRAMA DE FLUJO

Un Diagrama de Flujo representa la esquematización gráfica de un algoritmo, el


cual muestra gráficamente los pasos o procesos a seguir para alcanzar la
solución de un problema. Su correcta construcción es sumamente importante
porque, a partir del mismo se escribe un programa en algún Lenguaje de
Programación. Si el Diagrama de Flujo está completo y correcto, el paso del
mismo a un Lenguaje de Programación es relativamente simple y directo.

El diagrama de flujo es un esquema para representar gráficamente un


algoritmo. Se basan en la utilización de diversos símbolos para representar
operaciones específicas en el orden lógico que deben ejecutarse para resolver
un problema.

Símbolos utilizados en el diagrama de flujo

Comienzo y Fin

Proceso general

Toma de decisiones

Entrada / Salida de Información por medio de


un periférico
• Entrada de datos por teclado
• Salida de datos por pantalla

Salida de datos por impresora

Conector fuera de página

Almacenamiento magnético

Líneas de conexión y dirección del flujo

Página 78
REGLAS BASICAS

1. Todos los símbolos han de estar conectados

2. A un símbolo de proceso pueden llegarle varias líneas

3. A un símbolo de decisión pueden llegarle varias líneas, pero sólo saldrán


dos.

4. A un símbolo de inicio nunca le llegan líneas.

5. De un símbolo de fin no parte ninguna línea.

DIAGRAMA DE FLUJO GENERICO

Inicio

Entrada de
Datos

Proceso

Salida de
Datos

Fin

Página 79
Capítulo 6

El Ciclo de Vida

Del Software

“Modelo En Cascada”
EL CICLO DE VIDA DEL SOFTWARE

El término ciclo de vida del software describe el desarrollo de software, desde


la fase inicial hasta la fase final.

Este proceso se lleva a cabo debido al hecho de que es muy costoso rectificar
los errores que se detectan tarde dentro de la fase de implementación. El ciclo
de vida permite que los errores se detecten lo antes posible y por lo tanto,
permite a los desarrolladores concentrarse en la calidad del software, en los
plazos de implementación y en los costos asociados.

ETAPAS DEL CICLO DE VIDA CLASICO O EN CASCADA

El método de ciclo de vida para el desarrollo de sistemas es el conjunto de


actividades que los analistas, diseñadores y usuarios realizan para desarrollar
e implementar un sistema de información.

El ciclo de vida inicialmente propuesto por Royce, fue adaptado para el


software a partir de ciclos de vida de otras ramas de la ingeniería. Es el primero
de los propuestos y el más ampliamente seguido por las organizaciones (se
estima que el 90% de los sistemas han sido desarrollados así).

El método de ciclo de vida para el desarrollo de sistemas consta de las


siguientes fases:

RECONOCIMIENTO
DEL PROBLEMA

PLANEAMIENTO

ANALISIS DEL
SISTEMA

DISEÑO DEL
SISTEMA

CODIFICACION

PRUEBAS

IMPLEMENTACION

MANTENIMIENTO

RETIRO

Pagina 80
Este modelo admite la posibilidad de hacer iteraciones, es decir, durante las
modificaciones que se hacen en el mantenimiento se puede ver por ejemplo la
necesidad de cambiar algo en el diseño, lo cual significa que se harán los
cambios necesarios en la codificación y se tendrán que realizar de nuevo las
pruebas, es decir, si se tiene que volver a una de las etapas anteriores al
mantenimiento hay que recorrer de nuevo el resto de las etapas.

1. RECONOCIMIENTO DEL PROBLEMA

La solicitud para recibir ayuda de un sistema de información puede originarse


por una persona, cuando se formula la solicitud comienza la primera actividad
del sistema. Sin importar cuales sean estas, el proceso se inicia siempre con la
petición de una persona.

La idea de desarrollar un nuevo sistema surge cuando el usuario reconoce que


tiene problemas con los medios con que cuenta actualmente para llevar a cabo
su trabajo. Así comienza esta fase que trata de reemplazar el sistema existente
(ya sea manual o automatizado) por otro. En esta fase interviene totalmente el
usuario.

Las razones para iniciar un proyecto pueden ser varias


o Solución de problemas
o Surgimiento de nuevos requerimientos por parte de los usuarios
o Cambio de tecnología
o Mejorar el Sistema Actual

“Esta etapa tiene como objetivo el reconocer la organización en estudio, definir


el objetivo del proyecto e identificar el área de estudio.”

Debe documentarse mediante un informe que cuente con los siguientes ítems:
o Objetivo de la organización: que persigue como empresa, a donde
quiere llegar
o Reseña histórica: una breve revisión de cómo evolucionó la organización
desde sus inicios hasta la actualidad
o Tamaño de la organización: cantidad de personal, de sucursales,
cantidad de transacciones con lo que se puede determinar la magnitud
de la organización y sus transacciones
o Objetivo del proyecto: para qué nos llamaron
o Estructura de la Organización: desde el punto de vista de jerarquías,
cadena de mando, cantidad de personas (ORGANIGRAMA)
o Conclusión: determinación del área de la organización que se encuentra
involucrada con nuestro proyecto

Este informe se suele acompañar con anexos, como un diagrama de la


organización en el cual se observe su estructura y las relaciones jerárquicas
(organigramas).

Para recolectar la información necesaria para esta etapa se utilizan distintas


técnicas de recolección de información como revisión de documentos y
entrevistas.

Pagina 81
2. PLANEAMIENTO

Esta etapa tiene como objetivo realizar la planificación de todas las actividades
que se llevarán a cabo para el análisis del sistema, la estimación de sus
tiempos de desarrollo y los costos asociados a las mismas.

Una de las herramientas de planificación más simple es utilizar diagramas de


barra (GANTT) que muestran cada actividad de la etapa de análisis del
proyecto de sistema y la cantidad de tiempo que tomará cada actividad.

Esta etapa de planeamiento al igual de los tiempos debe ocuparse de los


recursos necesarios para llevar a cabo el análisis y esto implica personal y
equipamiento.

Para la planificación del proyecto se debe:


• Identificar las tareas a realizar
• Crear una red de tareas
• Desarrollar una agenda de fechas

La etapa de planeamiento se documenta a través de un informe que debe


incluir:

o Estimación de tiempos y costos para llevar a cabo las dos etapas siguientes
de análisis y diagnóstico
o Alternativas de Pago para las distintas etapas
o Se acompañará de una sección de anexo en el cual se incluirá el Diagrama
de GANNT

Pagina 82
3. ANÁLISIS DEL SISTEMA:

Esta etapa tiene como objetivo principal la recolección y documentación de


toda información relacionada con como se llevan a cabo las actividades que
hacen al sistema en estudio o de que forma trabaja el sistema para cumplir con
sus responsabilidades.

Es una etapa en la cual se recolecta información relacionada a los distintos


procesos que se llevan a cabo, los soportes que se utilizan para la información,
formularios, así como los reportes o salidas que se generan. Se desarrolla,
generalmente, en los niveles operativos de la organización.

“El aspecto fundamental es comprender todas las facetas importantes de la


parte de la empresa que se encuentra bajo estudio “

Los analistas, al trabajar con los empleados y administradores, deben estudiar


los procesos de una empresa para dar respuesta a las siguientes preguntas
clave:

¿Qué es lo que hace?


¿Cómo se hace?
¿Qué tan grande es el volumen de transacciones o decisiones?
¿Cuál es el grado de eficiencia con el que se efectúan las tareas?
¿Existe algún problema? ¿Qué tan serio es? ¿Cuál es la causa que lo origina?

En esta etapa el analista se esfuerza por saber cual es la información que


necesitan obtener los usuarios para desarrollar sus actividades.

Para conseguir información es muy común el uso de: entrevistas, encuestas y


cuestionarios.

“En esta etapa se debe entender y comprender de forma detallada cual es la


problemática a resolver, verificando el entorno en el cual se encuentra dicho
problema, de tal manera que se obtenga la información necesaria y suficiente
para afrontar su respectiva solución. Esta etapa es conocida como la del QUÉ
se va a solucionar.”

Consiste en cuestionar al usuario sobre qué hace el sistema, qué


características extras él quiere en su nuevo sistema y qué restricciones debe
satisfacer. La salida del análisis debe incluir una especificación funcional y un
análisis estructurado que contiene los requerimientos para el nuevo sistema,
los cuales el usuario debe leer, analizar y señalar lo que él quiere.

Pagina 83
Se documenta mediante un informe que contiene

• Introducción: Recopilación de Reportes del Sistema Actual

Elaboración de Procedimientos Propuestos para el nuevo sistema

• Requisitos Funcionales: Se deben incluir los requerimientos para el nuevo


sistema, los cuales el usuario debe leer, analizar y señalar lo que él quiere”

• Circuito Administrativo Propuesto: Representación de los circuitos


administrativos mediante el uso de técnicas gráficas; “Cursogramas”.

• Presentación de las Posibles Soluciones al Problema

• Ventajas y Desventajas de cada posible Solución

• Cuadro Comparativo de Costos y Tiempo de Ejecución

• Modelo funcional del Sistema Nuevo: Incluye Diagrama de Contexto y Tabla


de Eventos

El alcance del sistema lo indicamos a través de un modelo conceptual y una


tabla de eventos indicando qué modelos pertenecen al ámbito del sistema de
información y se identifican las entidades externas al sistema que aportan o
reciben información.

Se crea un modelo que establezca los límites del sistema así como el entorno
con el que el sistema interactuará.

Se documentará a través de un Diagrama de Contexto (DC) cuáles son los


límites del sistema, así como los terminadores con los que el sistema
interactuará. Se complementará el D.C con la confección de una tabla de
eventos.

En resumen

La tarea de esta etapa, en realidad consiste en llevar a cabo un plan de


trabajo adecuado que proporcione una indicación significativa del progreso.
El desarrollador del software y el cliente deben ponerse de acuerdo para
definir el ámbito y los objetivos del proyecto.

Una vez entendidos los objetivos y el ámbito del proyecto, se han de


considerar soluciones alternativas. Esto permitirá a gestores y
desarrolladores seleccionar el “mejor enfoque”, dadas las restricciones
impuestas por las fechas tope de entrega, los límites presupuestarios, la
disponibilidad de personal y las interfaces técnicas.

Pagina 84
Una vez expuesta la etapa de análisis resulta muy interesante mostrar gráficamente el
Problema del Análisis mal hecho.

Luego de analizar la imagen vemos la importancia de esta etapa ya que esta basada
justamente en que el cliente no recibe el producto deseado y además si se comete
un error en la fase de análisis no lo descubrimos hasta la entrega, con el consiguiente
gasto inútil de recursos.

Pagina 85
4. DISEÑO DEL SISTEMA:

Una vez que se tiene la suficiente información del problema a solucionar, es


importante determinar la estrategia que se va a utilizar para resolver el
problema. Esta etapa es conocida bajo el CÓMO se va a solucionar, establece
CÓMO alcanzar el objetivo.

• El diseño de un sistema de información produce los detalles que establecen


la forma en la que el sistema cumplirá con los requerimientos identificados
durante la fase de análisis.

• El Diseño del Sistema es la etapa en la cual se presenta el Modelo del


Sistema Propuesto.

• Es donde se pone de manifiesto la creatividad del Analista, para solucionar


el problema planteado y cumplir con los Objetivos establecidos en el Análisis
del Sistema.

El Diseño de Sistemas genera soluciones a requerimientos planteados.


Describe las especificaciones del Sistema Propuesto y define CÓMO lo va a
hacer el nuevo Sistema. En conclusión presenta el Modelo del Sistema
Propuesto

Las fases a seguir son:

4.1. Diseño global: En esta etapa se construye un modelo teórico de la


aplicación. Esto implica modelizar eventos, datos y procesos. Además se
deben establecer los niveles de eficiencia que debe cumplir el sistema.
Se definirán funciones y flujos de información en un diagrama de flujo de datos.
Se descompone el sistema software en sus componentes principales y éstos se
subdividen a su vez en componentes más pequeños. Este proceso iterativo
continúa hasta un nivel adecuado en el que los componentes puedan ser
tratados en el diseño detallado. Se trata de la construcción de Diagramas de
Flujo de Datos (DFD) en sus niveles sucesivos.
Se completará el trabajo con la confección de un diccionario de datos.

Además de modelar las funciones que se van a llevar a cabo en el sistema se


modelizará la distribución de datos del mismo. Para esto se utilizará el
Diagrama de Entidad-Relación (DER).

4.2. Diseño detallado: Es la última etapa del diseño y materia prima para el
programador. Construir una jerarquía apropiada de módulos de programas para
lo que es posible definir algoritmos utilizando lenguaje estructurado o
diagramas de flujo.
Se diseña el esquema lógico de bases de datos (se transforman los modelos
de datos de entidad-relación en un diseño de base de datos), se especifica la
interfaz hombre-máquina (diseño de pantallas, formatos de salida) y se define
el plan de puesta en marcha del sistema.

Pagina 86
5. DESARROLLO O CONSTRUCCIÓN DEL SISTEMA O CODIFICACIÓN:

Se deben transformar los algoritmos definidos durante el diseño en un lenguaje


comprensible por la computadora. La idea es lograr que la codificación pueda
realizarse en forma mecánica debido al nivel de detalle con que cuento en el
diseño.
La codificación se suele llevar a cabo en dos niveles: Primero realiza "la
conversión del algoritmo a un lenguaje de alto nivel" y luego "la transformación
del lenguaje de alto nivel a lenguaje maquina".
Al finalizar esta etapa voy a contar con el código fuente, programas ejecutables
y la documentación del sistema y de operación para el usuario.

6. PRUEBAS:

En esta actividad se inicia la definición del plan de pruebas, el cual sirve como
guía para la realización de las pruebas y permite verificar que el sistema de
información cumple con las necesidades establecidas por el usuario, con las
debidas garantías de calidad.

Las pruebas se diseñan en forma paralela a la evolución que se produce a


través de las etapas y comienzan a ejecutarse una vez que se ha finalizado la
codificación (Recién en ese momento contamos con la posibilidad de
ejecutarlas).

El proceso de comprobación o pruebas para eliminar errores se divide en 3


niveles:

☺ Pruebas unitarias: Comprueba cada módulo en busca de errores con el


objetivo de asegurarse que cada módulo se comporta de acuerdo con lo
especificado en el diseño técnico

☺ Pruebas de integración: Interconectan conjuntos de módulos previamente


probados, asegurándose de que el conjunto se comporta tan bien como lo
harían independientemente.

☺ Pruebas del sistema: Pretenden asegurar que el sistema software


totalmente integrado en su entorno se comporte de acuerdo con la
especificación de requisitos.

Pagina 87
7. IMPLEMENTACIÓN:

El objetivo de esta etapa es poner en marcha el sistema utilizando el plan


establecido en el diseño técnico. Se trata de un sistema funcionando
operacionalmente incluyendo objetivos de instalación y entrenamiento de
personal.

Se utilizan 3 enfoques para la implementación

Instalación en paralelo

En este caso se define un período de tiempo en que ambos sistemas funcionan


simultáneamente o sea en paralelo. Cuando exista la seguridad de que el
nuevo sistema funciona satisfactoriamente se discontinúa el sistema anterior.
Este tipo de implementación es muy segura, pero tiene la desventaja de ser
cara y diluir el esfuerzo del usuario en lugar de concentrarlo en un nuevo
sistema.

Instalación total

En esta alternativa se deja de usar el viejo sistema y simultáneamente se


comienza a utilizar el nuevo.
Para evitar inconvenientes provocados por el nuevo sistema, antes de realizar
este tipo de implementación hay que asegurarse que el nuevo sistema está
bien probado y funciona de acuerdo a las especificaciones establecidas.

Instalación por módulos

Se convierte el sistema para una línea piloto, un sector de la empresa, para la


cual se mantienen ambos sistemas en paralelo, para el resto se continúa con el
sistema anterior hasta tener la seguridad de que puede hacerse la conversión
total.

8. MANTENIMIENTO:

Una vez que el software es entregado al usuario comienza un nuevo enfoque


denominado de mantenimiento. Esto se debe a que después de instalado el
software sufrirá cambios ya sea porque se encuentren errores o porque se
requieran mejoras.
Se debe asistir al usuario ante los problemas que se le puedan presentar y se
deben detectar y clasificar las necesidades de mejoras fijando las prioridades
correspondientes.

9. RETIRO:

Jubilación del software ya sea por cierre de la empresa o reemplazo del mismo
por otro.

Pagina 88
Capítulo 7

Un Proyecto Completo

Sistema de Gestión de

Turnos Médicos
ETAPA DE RECONOCIMIENTO DEL PROBLEMA

ENTREVISTA AL DIRECTOR DEL CENTRO MÉDICO “LA BONNE SANTÉ”

1) ¿Cuál es el criterio de trabajo básico del centro?

Formamos parte de un centro médico que se caracteriza por una atención


personalizada a cargo de un equipo de profesionales con amplia trayectoria en
sus respectivas especialidades y de gran calidad humana.
El centro médico tiene por misión brindar un nivel médico y científico superior,
cuidando proveer la más alta calidad en el servicio.

2) ¿Con cuántos profesionales están trabajando?

En este momento hay 40 profesionales.

3) ¿Cuáles son los servicios que presta el centro?

En cuanto a las prestaciones médicas, el centro médico cuenta con amplios


consultorios (se pueden efectuar simples consultas médicas ambulatorias) y
funciona los 365 días del año cubriendo las siguientes especialidades en forma
activa: Clínica Médica, Clínica Pediátrica, Cardiología, Traumatología,
Ginecología, Obstetricia, Otorrinolaringologia y Odontología

4) ¿Tiene sucursales?

No.

5) Con el fin de conocer la estructura organizacional de la empresa ¿Podría


usted facilitarme el organigrama?
Sí, el mismo esta documentado en este escrito

6) ¿Cuáles son sus principales demandas?

Básicamente no estamos contando con una gestión eficiente de los turnos y en


consecuencia tenemos perdida del control de las citas concretadas y salarios
médicos a abonar

7) ¿Por qué la gestión de turnos esta vinculada con los salarios médicos a
abonar?

Los profesionales forman su sueldo de acuerdo a la cantidad de pacientes


atendidos; por cada visita una parte corresponde al profesional y otra a la
institución.

8) ¿Todos trabajan la misma cantidad de horas?

No, cada uno de ellos pone sus horarios atención siendo 12 hs semanales la
cantidad mínima de trabajo

Página 89
9) ¿Quién le parece que sería la próxima persona con la que debería hablar?

José Gómez de Atención al cliente que esta a cargo de la mesa de entradas

10) Cuando me comunique con esta persona, ¿podría mencionar su nombre?

Si por supuesto y la voy a poner al tanto explicándole que justamente estamos


trabajando para ayudarle a solucionar este tema de asignación de turnos

11) ¿Qué sectores del centro considera involucrados con el pago de salarios?

Contaduría, Personal y Tesorería

INFORME DEL RECONOCIMIENTO

OBJETIVO DE LA ORGANIZACIÓN

Los objetivos del consultorio médico son:

1 - Lograr una atención personalizada de cada paciente

2 - Brindar un nivel médico con la más alta calidad en el servicio

3 – Ofrecer calidez humana en la atención de cada paciente

4 – Garantizar la atención oportuna y contribuir al mejoramiento de la salud


dentro de todas las especialidades existentes en la actualidad: Clínica Médica,
Clínica Pediátrica, Cardiología, Traumatología, Ginecología, Obstetricia,
Otorrinolaringologia y Odontología

TAMAÑO DE LA ORGANIZACIÓN

El edificio cuenta con cuatro pisos. En la planta baja, accediendo por la entrada
principal se encuentra un amplio hall de entrada, cómodo y confortable. A la
izquierda del ingreso, y luego de traspasar el hall de entrada, se encuentra la
Mesa de Entradas destinada a la recepción de los turnos para ser atendidos
por los distintos profesionales y para diversos estudios como radiología
convencional, ecografías, tomografía computada, resonancia nuclear
magnética, mamografía etcétera. Este sector también entrega los resultados de
estudios efectuados con anterioridad. A la derecha se encuentra el sector de
cajas.

El primer piso está destinado para efectuar diversos estudios. En el segundo y


tercer piso se encuentran distribuidos los 20 consultorios para atender las
disitintas especialidades.

Página 90
Todos estos sectores poseen una distribución funcional sumamente operativa,
que permite que su personal altamente capacitado para la atención de
pacientes, otorgue una respuesta cálida, eficaz y eficiente, evitando así
demoras innecesarias.
En el cuarto piso se encuentran los demás sectores de la organización:
Personal, Compras, Pago a proveedores, Dirección médica, Contaduría y
Tesorería.

OBJETIVO DEL PROYECTO

Partiendo del resultado de la entrevista con el director del centro médico nos
hemos centrado en que debemos ocuparnos de los temas de asignación de
turnos y sueldos de profesionales.

“El objetivo del equipo de trabajo consistirá en desarrollar un Sistema para


lograr contar con un buen proceso de gestión de turnos y mejorar la eficiencia
en la liquidación de los salarios de los profesionales; con motivo de lo cual se
propone iniciar, administrar, dirigir y controlar las actividades asociadas con el
desarrollo del Sistema a fin de conseguir los mejores resultados en cuanto a
tiempo, capacidad y presupuesto.”

CONCLUSIÓN

El estudio del sistema actual está orientado a las áreas de Atención al Cliente,
Caja, Personal, Contaduría y Tesorería que son los sectores involucrados en
las tareas de asignación de turnos a los pacientes, cobro de bonos y pago a
profesionales.

Página 91
ANEXO DEL INFORME ORGANIGRAMA DE LA EMPRESA

Director 1

Federico Pérez Sistemas 1

Carlos Sánchez

Atención al
3 Administración 5 Personal 5 Compras 5 Dirección 2 Contaduría 5 Tesorería 5
Cliente
Jefe: José Gomez
Médica
Jefe: Néstor García Jefe Personal Jefe Compras: Jefe: Hernán Jefe: Pedro Jefe: Mario
Julio López Alicia Torcuato Solis Hernández García

Pago a 5 Caja 5 Ginecología 4


Clínica 8
Proveedores Médica
Jefe: María Solá Jefe: Carlos Ordoñes Jefe: Marisa Gonzalez
Jefe: Graciela Cortés

Obstetricia 3
Pediatría 6
Jefe: Adrián Calvo
Jefe: Omar Arnedo

Otorrinolaringo- 4
Cardiología 4 logia
Jefe: Esteban Carrizo
Jefe: Andrés Tetis

Odontología 6
Traumatología 5
Jefe: Alberto Saenz
Jefe: Juan de la Vega

Página 92
ETAPA DE PLANIFICACION

DEFINICIÓN DEL ALCANCE DEL PROYECTO

o Se basará en la organización de la información creando una estructura para


las decisiones y estableciendo distintas alternativas, las cuales serán
seleccionadas finalmente por el Director del Centro Médico.

o El estudio del sistema actual está orientado a las áreas de Atención al


cliente, caja, personal, contaduría y tesorería que son los encargados de
llevar todo el control de asignación de turnos a los pacientes, cobro de
bonos y pago a profesionales.

INFORME DE PLANIFICACIÓN DE ANÁLISIS Y DIAGNÓSTICO

Estimación de tiempo y Costo

Tiempo: 28 días
Costo: $5.500

Responsabilidades De Los Miembros Del Equipo De Trabajo

o Jefe de Equipo
Responsable de la planificación, coordinación e información de resultados al
usuario de la etapa de análisis

o Analista de Sistemas
Recopilación y unificación de los datos provistos por el usuario

Alternativas de Pago

Tarjetas De Crédito

Visa Mastercard American Express


Para su comodidad usted, puede hacer sus pagos a través del procesamiento
online de su tarjeta de crédito Visa, Mastercard y American Express en su
moneda local.

Transferencias / Depósitos Bancarios / Débito Automático

Banco Galicia Débito Automático


Ud. puede abonar sus servicios por Ud. puede abonar sus servicios por
Depósito o Transferencia Bancaria: Débito Automático:
Datos para depósitos y/o
transferencia: ATENCION: El débito automático es

Página 93
Entidad Bancaria: Banco XXXX sólo para cuentas bancarias, no se
Titular de Cuenta: XXXXXXX hacen débitos de tarjetas de crédito
Tipo de cuenta: Cuenta Corriente en con este medio de pago. El tiempo de
pesos verificación de este medio de pago es
Número de cuenta: 999-9999 de 5 días hábiles.
CBU: 9999-99999
CUIT: 99-99999999-9

Pago Fácil / RapiPago

Pago Fácil RapiPago


Para su mayor comodidad, Ud. puede pagar a través de Pago Fácil,
RapiPago. Simplemente deberá dirigirse a cualquiera de las sucursales

ANEXO:

ESTIMACION GENERAL DE TIEMPOS PARA LA FASE DE ANALISIS

ANALISIS DEL SISTEMA ACTUAL PRECEDEN Duración


CIA en Días
A - Relevamiento de equipamiento y verificación NINGUNA 7 días
de organigrama
• Armado de Cuestionario
• Obtención de Respuestas de los
Cuestionarios
B - Entrevista al Jefe de Atención al Cliente A 7 días
• Armado de Entrevista
• Obtención de Respuestas de la Entrevista
C - Entrevista al Personal de Atención al Cliente B 7 días
• Armado de Entrevista
• Obtención de Respuestas de la Entrevista
D - Cuestionario Personal Caja C 7 días
• Armado de Cuestionario
• Obtención de Respuestas de los
Cuestionarios
E - Entrevista Personal Caja C 7 días
• Armado de Entrevista
• Obtención de Respuestas de la Entrevista

DIAGRAMA DE GANNT
TAREA 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2
/DIAS 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8
A
B
C
D
E

Página 94
ETAPA DE ANALISIS

CUESTIONARIO DE VERFICACIÓN DE ORGANIGRAMA Y RELEVAMIENTO


DE EQUIPAMIENTO

¿Cuál es su antigüedad en la empresa?

Menos de 2 años
De 2 a 5 años
De 6 a 10 años
De 11 a 20 años
Más de 20 años

¿A qué departamento pertenece?

Dirección Médica
Atención al Cliente
Administración
Otro

¿Cantidad de personas en su sector?

-------------------

¿Equipamiento Informático con el que cuenta?

Procesador
Disco Rígido
Memoria
Teclado SI NO
Mouse SI NO
Tarjeta de Red SI NO
Conexión a Internet SI NO

Sistema Operativo con el que cuenta

Windows
Linux
Otro

Este cuestionario se ha repartido en todas las áreas para se completado por todo el
personal.

Página 95
ENTREVISTA AL JEFE DE ATENCIÓN AL CLIENTE

1) ¿Cuántas personas trabajan en el sector?


Somos 2 personas.

2) ¿Trabajan juntas?
No. Hacen 2 turnos diferentes (mañana y tarde). Se trata de sólo asignar turnos,
necesitan cubrir el horario completo, no estar juntos.

3) ¿En que horario se cruzan?


No se cruzamos. Una trabaja hasta las 12:30hs y la otra comienza a las 14hs

4) ¿Cómo conocen los horarios de atención de los profesionales?


Están anotados en una hoja.

5) ¿Cómo recolecta esos horarios de atención?


Cuando puedo ir viendo al médico le pregunto, pero a veces solos cambian sus
horarios sin avisarme previamente

6) ¿Cuál serían su principal demanda?


Información de horarios de atención y coordinación de las 2 personas de atención al
cliente para la asignación de turnos

ENTREVISTA A LA PERSONA 1 DE ATENCIÓN AL CLIENTE

1) ¿Qué actividades realiza en un día típico en este puesto?


Asigno turnos para los diferentes profesionales ya sea en forma telefónica o
personalmente

2) De acuerdo a su respuesta del cuestionario tiene un equipo informático posible de


utilizar ¿Cuenta con algún sistema para asignar los turnos?
No, los anoto en un cuaderno

3) ¿Le parece que resultaría de utilidad un sistema de gestión de turnos?


No se lo que un sistema, pero creo que no me ayudaría porque en el cuaderno tengo
todo muy bien organizado

4) ¿Cómo conoce los horarios de atención de los profesionales?


Están anotados en una hoja, pero a veces me manejo de memoria porque no la
encuentro, es que mi compañera también la usa y a veces no se donde queda
guardada

5) ¿Dónde registra su compañera los turnos asignados?


Usa un programa en la computadora. Es que cada uno tiene su propia forma de
organizar la información y no entendemos la forma de asentar del otro. Además yo no
entiendo la computadora

6) ¿Y como conocen los pacientes que están citados?


Conozco los que anote en mi cuaderno y si no como les damos un papelito con el
turno se lo pido

7) ¿Conocen los médicos los pacientes que tienen que atender en el día?
No lo saben, simplemente van llamando por horario y si esta el paciente pasa y sino
pasa el siguiente.

Página 96
8) ¿Cuál es la demanda actual del sector?
Unificar todo teniendo toda la información en un único cuaderno, pero que se pueda
leer y entender porque yo soy prolija anotando pero no se como es mi compañera.

ENTREVISTA A LA PERSONA 2 DE ATENCIÓN AL CLIENTE

1) ¿Qué actividades realiza en un día típico en este puesto?


Doy turnos para las diferentes especialidades a las personas que se acercan al centro
médico o llaman por teléfono.

2) De acuerdo a su respuesta del cuestionario tiene un equipo informático posible de


utilizar ¿Cuenta con algún sistema para asignar los turnos?
No, utilizo el programa Word para llevar un registro de los pacientes que se van a
atender cada día.

3) ¿Le parece que resultaría de utilidad un sistema de gestión de turnos?


No se, nunca vi ninguno y no se como funciona. Creo que lo que ayudaría sería juntar
toda la información en un único archivo de word para que todos podamos consultarlo

4) ¿Cómo conoce los horarios de atención de los profesionales?


Existe una hoja donde figuran los días y horarios de atención de cada profesional, a
veces asigno turnos haciendo uso de mi memoria por no encontrarla ya que también la
utiliza mi compañera que trabaja a la mañana.

5) ¿Dónde registra su compañera los turnos asignados?


Lleva su propio registro en un cuaderno. Trato de reunir la información de ambas en mi
archivo de Word pero muchas veces no le entiendo la letra. También se complica
cuando algún paciente quiere anular un turno y no encuentro dónde quedó registrado.
En esos casos le dejo una nota escrita a mi compañera de la mañana para que lo
anule.

6) ¿Y como conocen los pacientes que están citados?


Cada paciente se presenta con un papel donde figura el día, horario y nombre del
médico que lo va a atender.

7) ¿Conocen los médicos los pacientes que tienen que atender en el día?
El profesional llama por horario al siguiente paciente y verifica día, hora de atención y
sus datos en el papel.

8) ¿Cuál es la demanda actual del sector?


Que toda la información quede unificada en un solo lugar y que resulte fácil de
modificar y consultar.

Página 97
CUESTIONARIO PERSONA 1 SECTOR CAJA

1) ¿Que documentación reciben?

_____________________ _

2) ¿De quién o de que sector reciben documentación?

_____________________ _

3) ¿Qué documentación emiten?

_____________________ _

4) ¿A quién envían documentación?

_____________________ _

Este cuestionario se repartió a la persona del turno tarde del sector caja para no
interrumpir su trabajo diario y se obtuvo el siguiente resultado.

Documentación recibida

Paciente comprobante de turno

Documentación emitida

Bono de Pago por duplicado original: paciente


duplicado: contaduría

Página 98
ENTREVISTA PERSONA 2 SECTOR CAJA

1) ¿Cuántas personas trabajan en el sector?

Trabajamos 2 personas en 2 turnos diferentes. Yo trabajo en turno mañana y mi


compañero en turno tarde.

2) ¿Los horarios de sus turnos están basados en alguna otra actividad?

Sí. Básicamente se establecieron 2 turnos para poder cubrir el horario completo de


atención de los médicos. El establecimiento está abierto de 7hs a 19hs y dentro de ese
horario se ubican todos los horarios de atención de los profesionales.

3) ¿Qué actividades realiza en un día típico en este puesto?

Cobro diversos bonos a los pacientes ya sea para asistir a una consulta o para
hacerse algún estudio. Deben traer el papel con el turno asignado en Atención al
Paciente.

4) ¿Qué nombre tiene el documento de asignación de turno que menciona?

Simplemente “Comprobante de Turno”

5) Las personas que sacaron turno por teléfono ¿Cómo se manejan al no tener
el papel asignado?

Deben presentarse previamente en Atención al cliente para verificar el turno asignado


y se les confecciona un comprobante del turno pedido

6) ¿Qué comprobante de pago le da al paciente?

Un bono original

7) ¿Emite el bono en una sola copia?

No, en original y duplicado. El duplicado lo archivamos como comprobante nuestro.

8) ¿A quién rinde la caja al final del turno?

A contaduría. Le doy la plata.

9) ¿Qué documentación le da junto con el dinero?

Ninguna. Simplemente le firmo un papel como constancia que entregue la plata

Página 99
ESTUDIO DEL SISTEMA ACTUAL

INFORME DE ANALISIS

INTRODUCCION: RECOPILACION DE REPORTES DEL SISTEMA ACTUAL

¿Qué es lo que hace?


Dentro del límite definido el sistema se encarga de dar turnos a los pacientes y
realizar pago a los profesionales
¿Cómo se hace?
Los turnos son otorgados personalmente o telefónicamente y esta función esta
a cargo de 2 personas trabajando en contra turno
¿Qué tan grande es el volumen de transacciones o decisiones?
El horario de atención al público es de 7:00 hs a 19:00 hs, pudiéndose tomar
una hora de descanso para almorzar. Por cada hora se asignan 3 turnos de 20
minutos cada uno otorgando un total de 33 turnos por médico, al tener 20
consultorios, 660 por día y 3300 por semana. Estos valores pueden cambiar
dependiendo de la especialidad del profesional pudiendo cambiar la cantidad
de minutos de atención por turno.
¿Cuál es el grado de eficiencia con el que se efectúan las tareas?
El sistema de información actual presenta incompatibilidades en la información de
gestión de turnos y falta de validez en la información de liquidación de salarios de los
profesionales. “INEXACTITUD DE RESULTADOS”
“No existe una gestión eficiente de los turnos y como resultado se deriva en perdida
del control de las citas concretadas y salarios médicos a abonar”
¿Existe algún problema? ¿Qué tan serio es? ¿Cuál es la causa que lo origina?

IDENTIFICACION DE PROBLEMAS DEL SISTEMA ACTUAL

• El sistema de información actual presenta incompatibilidades en la información


de gestión de turnos y falta de validez en la información de liquidación de salarios
de los profesionales.
• No se cuenta con almacenamiento de información demográfica de Pacientes
• No se cuenta con almacenamiento de información de los Médicos
• Incompatibilidad de tecnologías utilizadas para la asignación de turnos en
ambos turnos de trabajo
• Desintegración de la información manejada en los diferentes turnos de
atención a pacientes
• Información repetida e inconsistencia de datos en el proceso de gestión de
turnos a los pacientes
• Desactualización de los días y horarios de atención de cada médico
• Falta de información de pacientes atendidos para realizar el calculo de pago a
profesionales
• No existe documentación de verificación de dinero ingresado para el sector de
contaduría.
• El dinero está quedando en el sector de contaduría cuando debería quedar en
el sector de Tesorería generando esto posibles problemas de seguridad

Causas

Básicamente en el sector de Atención al cliente ambas personas cumplen horarios


distintos, no tienen comunicación directa y manejan diferentes tecnologías
provocando falta de efectividad en la operación de asignación de turnos e

Página 100
involucrando esto inconsistencias en los pagos a profesionales ya que éstos cobran
según los pacientes atendidos.
El origen de la “no integración” de la información esta basado en manejo de
tecnologías diferentes para asentar los datos, diferente capacitación en el personal y
falta de comunicación entre el personal.

SITUACION INFORMATICA ACTUAL

DIRECTOR ATENCION AL CLIENTE CAJA

Con las respuestas obtenidas se ha determinado que el hardware “tipo” existente es:

FICHA TECNICA

PROCESADOR
Modelo DualCore
Velocidad 2.3 Ghz
Marca AMD Athlon 64 / INTEL
MEMORIA
RAM 2 GB
TIPO DDR2
DISCO RIGIDO
Capacidad 160 GB
UNIDAD OPTICA
Unidad Óptica DVD+/- RW
CARACTERISTICAS GENERALES
Teclado SI
Mouse SI
Parlantes SI
Tarjetas de Red NO
Audio SI
Tarjeta Gráfica Compatible NO

Página 101
DEFINICION DEL NUEVO SISTEMA

PRINCIPALES OBJETIVOS DEL NUEVO SISTEMA

• Agilizar el manejo de información en la gestión de turnos.


• Facilitar el acceso a la información.
• Aumentar la eficiencia en la gestión de turnos.
• Mantener actualizada la información demográfica de los pacientes
• Mantener actualizada la información del personal médico
• Implementar una metodología de recolección de información referida a días y
horarios de atención de cada médico
• Efectuar sistemáticamente alta de agenda de turnos según los horarios de
atención de cada médico, es decir, poder administrar los turnos en todas las
especialidades con las que cuenta el Centro Médico
• Que el centro médico, para rendir profesional y eficientemente, cuente con un buen
proceso de gestión de turnos.
• Desarrollar e implementar instrumentos basados en tecnologías de la información
y comunicación, para mejorar la eficiencia en la liquidación de salarios de los
profesionales logrando solucionar inconsistencias en los pagos.

ALCANCE DEL SISTEMA

El sistema a desarrollar está orientado al área de Atención al Cliente que es la


encargada de asignar los turnos, al área de Caja que se ocupa de los cobros a los
pacientes y al área de personal que tiene todo el control de las pago a profesionales.
Esto totalmente conectado con la información que debe llegar en tiempo y forma al
área contable y manejo con tesorería

ESTABLECIMIENTO DE LOS LÍMITES DEL SISTEMA

Se llevará a cabo el análisis y diseño del sistema, como así también la determinación
de los requisitos de software y hardware pertinentes.

Página 102
REQUISITOS FUNCIONALES

ADMINISTRACION DE PACIENTES

RF1 RF2 RF3


INCORPORAR MODIFICAR BORRAR
PACIENTE PACIENTE PACIENTE

ADMINISTRACION DE MEDICOS

RF4 RF5 RF6


INCORPORAR MODIFICAR BORRAR
MEDICO MEDICO MEDICO

ALTA DE ESTUDIOS

RF7 RF8 RF9


INCORPORAR MODIFICAR BORRAR
ESTUDIO ESTUDIO ESTUDIO

ALTA DE HORARIOS MEDICOS

RF10 RF11 RF12


SELECCIONAR INCORPORAR MODIFICAR
MEDICO HORARIO HORARIO

RF13
BORRAR
HORARIO

Página 103
ALTA DE AGENDA DE TURNOS

RF14 RF15 RF16


INGRESAR PARAMETROS
SELECCIONAR DE ALTA INGRESAR
PROFESIONAL AGENDA

RF17
BORRAR
AGENDA

ASIGNACION TURNOS PACIENTES

RF18 RF19 RF20


SELECCIONAR LOCALIZAR HORARIO ASIGNAR
DISPONIBLE
PROFESIONAL PACIENTE

RF1 RF1 RF1


CARGAR CANCELAR IMPRIMIR TURNOS
TURNO TURNO DEL DIA

PLANILLA DIARIA

RF21 RF22 RF23


SELECCIONAR SELECCIONAR OBTENER
FECHA MEDICO RESULTADOS

ADMINISTRACION DE USUARIOS

RF24 RF25 RF26


INCORPORAR MODIFICAR BORRAR
USUARIO USUARIO USUARIO

Página 104
CIRCUITO ADMINISTRATIVO PROPUESTO PARA EL NUEVO SISTEMA

De acuerdo a las entrevistas y cuestionarios realizados el centro médico el circuito de


información y flujo de documentos actual lo podemos representar mediante el
siguiente cursograma:

CURSOGRAMA

1- El paciente solicita su turno a Atención al cliente


2- Atención al cliente: Ofrece disponibilidad de turnos
3- Paciente: Selecciona Turno
4- Atención al cliente: Confecciona el comprobante de turno al paciente y se lo
entrega
5- Paciente: Abona en la caja presentando su comprobante de turno
6- Caja: Recibe el importe de la operación con el comprobante de turno y
emite el bono de la consulta en 2 copias como comprobante de pago
7- Caja: Entrega al comprobante de turno y el bono original al paciente y
almacena el duplicado
8- Paciente: Al ser atendido el paciente entrega su Comprobante de Turno al
médico quien lo verifica y lo hace firmar al mismo paciente
9- Paciente: Entrega Comprobante Firmado al médico

Al finalizar el día
9 – Caja: registra y entrega a contaduría el dinero cobrado y el duplicado de los
bonos
10 – Contaduría: Recibe los duplicados de los bonos que permanecían en caja
y los archiva
11 - Médico: Entrega a Contaduría los Comprobantes de Turnos Firmados
12 – Contaduría: Recibe los Comprobantes de turnos firmados que tenían los
médicos, realiza la verificación de los mismos contra los bonos firmados y los
archiva.
12 – Contaduría: Entrega a cada médico su “Comprobante de Cobro”
13 – Contaduría: Entrega la plata y los bonos de pago duplicado a tesorería
14 – Tesorería: Controla y archiva

Al finalizar el mes
15 – Contaduría: Confecciona los recibos de acuerdo a los comprobantes de
cobro recibidos (duplicados)
16 – Contaduría emite un listado de los pagos a realizar y los envía a tesorería
17 – Tesorería controla y verificar los bonos contra el listado y emite los pagos
18 – El médico solicita su recibo a contaduría
19 – Contaduría controla y verifica el recibo contra el comprobante de pago
20 – Contaduría entrega el recibo duplicado al médico para que lo firme
21 – El médico firma el recibo duplicado y devuelve a contaduría
22 – Contaduría archiva el recibo duplicado (R2), firma el original y entrega el
original al médico
23 – El médico va a tesorería con el recibo firmado para cobrar
24 – Tesorería controla y verifica el pago contra el recibo, entrega formulario de
cobro para firmas junto con el cheque y devuelve el recibo

25 – El médico firma el formulario y lo devuelve a tesorería

Página 105
Médico Paciente Atención al Caja Contaduría Tesorería
Cliente
Solicita Turno

Selecciona
Turno

Paga
CT1
2

Comprobante
Turno

CT1

CT1 CT1, B1 2
Bono

B1 B2

Firmar
B2 + B2 +
Registra DINERO DINERO
CT1 Firmado

B2

CT1 Firmado

CT1

B2

CT1

CC1 2
Comprob
1 Cobro

CC1

CC2

Página 106
Médico Contaduría Tesorería

B2

CC1 CC2

RECIBO
2

EMITE
LISTADO

LISTADO

SOLICITA RECIBO +
CC1

R2

R2 FIRMADO R2
Firmado

R1 FIRMADO

R1 FIRMADO

CHEQUE + R1 FIRMADO +

FORMULARIO DE COBRO

FC

R1 FIRMADO

Página 107
POSIBLES SOLUCIONES

1) ALTERNATIVA 1: SISTEMA DE GESTION INTEGRAL DE TURNOS

Se propone un software diseñado para satisfacer las necesidades del Centro Médico
en donde sea posible almacenar información demográfica de Pacientes, información
de Médicos, Horarios de atención médica y Gestión de Turnos.

Básicamente, se trata de una solución informática que sirve como herramienta de


gestión de turnos y control de liquidación de honorarios correspondientes a cada
profesional.

El Sistema permite registrar los pacientes, a cada profesional con sus días de
atención, horarios y turnos especiales y ofrece la generación automática de la agenda
de turnos de acuerdo a los datos ingresados.

A partir de cargar los turnos el sistema le permitirá obtener, en forma automática, las
liquidaciones de honorarios de los profesionales que trabajan en el Centro Médico.

CARACTERISTICAS DEL SOFTWARE

• Sistema de gestión en red, que permite asignar turnos en forma automática.


• Se requiere que todas las PC estén conectadas a una red.
• Posee una interface para definir usuarios.

• Gestión de Profesionales
o Jefe de Asignación de turnos (1 computadora): Encargado de recolectar
información de horarios de atención de los médicos en forma mensual
o Almacena los Horarios de atención de cada médico.
o Jefe de Asignación de turnos (1 computadora): Se dan de alta datos de
los médicos y turnos médicos disponibles a asignar en forma mensual

• Gestión de Pacientes
o Puesto Recepción: (1 computadora): Se dan de alta datos del paciente

• Gestión de Agenda por turnos


o Valida el turno desacuerdo a los horarios de atención del médico
o Permite buscar rápidamente turnos por especialistas, medico, días
disponibles
o Muestra la cantidad de turnos dados en cada día.
o Puesto Recepción (1 computadora): Donde el paciente proporciona el
pedido de su turno, de acuerdo a esto la recepcionista lo deriva a uno
de los puestos asignados
o Se imprime sobre una impresora térmica de 57mm el ticket con el Turno
y el sector asignado

• Gestión de Liquidación a Profesionales


o Se lleva un control histórico de turnos asignados para ser usado en
estadísticas
o A partir de cargar los turnos el sistema le permitirá obtener, en forma
automática, las liquidaciones de honorarios de los profesionales que
trabajan en el Centro Médico
o Impresión de turnos por profesional

Página 108
• Caja 1 (computadora): el paciente abonará su bono en el momento de
atenderse y la información será pasada a los consultorios correspondientes

• Caja 1 (computadora): se imprimen 2 copias del pago del bono donde 1 será
para el paciente y la otra una asistente la llevará al consultorio correspondiente
para que el paciente sea llamado

REQUERIMIENTOS

• Windows XP/2000/Vista en cada puesto


• Conexión de RED en todas las terminales

TAREAS Y RESPONSABILIDADES DE LOS MIEBROS DEL EQUIPO

LIDER DEL PROYECTO (Ingeniero en Sistemas)

• Estudio de oportunidad, diseño y análisis del sistema, puesta en marcha y


evaluación del sistema
• Lleva sobre sus hombros la responsabilidad de planear, coordinar e informar
de la marcha del proyecto en las tareas que lleve adelante el equipo

ANALISTA DE SISTEMAS

• Diseño y Análisis del sistema, desarrollo del sistema, puesta en marcha y


evaluación del sistema
• Recopilación y unificación de los datos provistos por el usuario, como así
también actuar como interlocutor válido entre éste y el equipo de sistemas y
obtener una comunicación fluida entre ambos para que la falta de la misma no
sea una pérdida de tiempo
• Desarrollo del sistema, puesta en marcha
• Tareas de secretario de equipo: Además de su función como miembro normal
del equipo, seria responsable de planear y organizar las reuniones, recopilando
los acuerdos suscitados en ellas, para crear y mantener una carpeta de
proyecto y asegurar que se distribuyan las tareas a las personas
correspondientes.

PROGRAMADOR

Desarrollo de los programas del sistema, puesta marcha y evaluación del sistema

Página 109
RECURSOS INFORMATICOS PROPUESTOS

Se propone contar con una red de área local (LAN). Se trata de una red
privada para el centro médico.
Con esta red existirá la posibilidad de conectar computadoras personales, con
objeto de compartir recursos e intercambiar información.
Está restringida en tamaño, lo cual significa que el tiempo de transmisión, en el
peor de los casos, se conoce, lo que permite cierto tipo de diseños
(deterministas) que de otro modo podrían resultar ineficientes. Además,
simplifica la administración de la red.

Se emplearía tecnología de difusión mediante un cable sencillo al que están


conectadas todas las máquinas. Opera a velocidades entre 10 y 100 Mbps.
Tienen bajo retardo y experimentan pocos errores.

Topología en Estrella.

Esta topología se caracteriza por existir en ella un punto central, o más


propiamente nodo central, al cual se conectan todos los equipos, de un modo
muy similar a los radios de una rueda.
De esta disposición se deduce el inconveniente de esta topología, y es que la
máxima vulnerabilidad se encuentra precisamente en el nodo central, ya que si
este falla, toda la red fallaría. Este posible fallo en el nodo central, aunque
posible, es bastante improbable, debido a la gran seguridad que suele poseer
dicho nodo. Sin embargo presenta como principal ventaja una gran
modularidad, lo que permite aislar una estación defectuosa con bastante
sencillez y sin perjudicar al resto de la red.
Para aumentar el número de estaciones, o nodos, de la red en estrella no es
necesario interrumpir, ni siquiera parcialmente la actividad de la red,
realizándose la operación casi inmediatamente.

Los componentes con los que cuenta la red son:

• Router
• Medio de Comunicación
• Terminales

Página 110
ESQUEMA BASICO DE LA ARQUITECTURA DE LA RED

ESQUEMA INFORMATICO DENTRO DEL CENTRO MEDICO

DIRECTOR AT. AL C LIENTE / RECEPCION ADMINISTRACION - CAJA

COMPROBANTE DE TURNO BONO

PEDIDO
ATENCION
TURNOS
MEDICA

PERSONAL CONTADURIA TESORERIA

RECIBOS RECIBOS COMPROB


RECIBOS
DE COBRO
DOCUMENTO
RECEPCION DINERO

Página 111
ESTIMACION DE TIEMPO

TAREA Días
A
Análisis del Sistema
• Descripción de procesos y procedimientos (Diagrama de 90
Flujo de Datos (DFD))

B
Diseño Global
• Diagrama de Flujo de Datos del Sistema Propuesto 120
• Diagrama Entidad Relación del Sistema Propuesto
• Diccionario de Datos del Sistema Propuesto

C
Diseño Detallado
• Esquema Lógico de Base de Datos 90
• Normalización
• Módulos

D
Desarrollo o Construcción del sistema 60
• Código Fuente y Código Objeto
• Creación de Base de Datos

E
Pruebas 30

F
Implementación del Sistema 90

DIAGRAMA DE GANNT

TAREA 30 60 90 120 150 180 210 240 270 300 330 360 390 420 450 480
/DIAS
A
B
C
D
E
F

Página 112
ESTIMACION DE COSTOS

RECUROS HUMANOS TIEMPO COSTO

Líder del Proyecto 350 días 84000

Analista de Sistemas 480 días 80000

Programador 180 días 21000

TOTAL 185000

EQUIPAMIENTO CANTIDAD COSTO

Router 1 800

Medio de Comunicación 300 1500

Terminales 10 30000

TOTAL 32300

COSTO TOTAL DEL SISTEMA: $ 217300

Página 113
2) ALTERNATIVA 2: SOFTWARE DESARROLLADO POR CLINIC’S MANAGEMENT

CARACTERISTICAS GENERALES DEL SOFTWARE

Resguardo y recuperación de la información


Funciona en cualquier PC que tenga como sistema operativo Microsoft
Windows. Desde XP a Seven.
Interfaz de usuario intuitiva y de fácil uso.
Posibilidad de trabajar en red

HISTORIAS CLINICAS

Cada profesional puede configurar su propio modelo de historia clínica


para recabar solo la información necesaria.

Configuración de los antecedentes personales a recabar.

Registro de información por visita.

Configuración de la historia familiar del paciente.

Historia clínica con imágenes para dibujar o marcar información de


formato gráfico.

Graficación de la información presente en la información por visitas del


paciente.

PACIENTES

Completa ficha del paciente.


Un paciente puede ser accedido solo por el profesional a cargo o bien
por su secretaria. Puede haber pacientes generales que los puede
acceder cualquier profesional.
Historia clínica propia en base a la configuración del paciente.
Registro de la cuenta corriente del paciente.
Amplia libertad en la creación de planes de pago.
Sencillez a la hora de registrar un pago.
Carga de imágenes del paciente.
Registro de la o las obras sociales del paciente

Página 114
PROFESIONALES

Ficha de o de los profesionales que utilizan el sistema.


Registro de los horarios de trabajo y días no laborables del Médico.
Agenda de turnos individual para cada Médico.
Cada profesional puede tener sus pacientes independientes del resto o
bien compartir la información de los mismos.

AGENDA

Completa agenda con vista de turnos diaria y por semana.


Posposición de turnos por días y por semana
Diferenciación de los estados de los turnos por colores
Impresión de los turnos diarios y turnos cancelados
OBRAS SOCIALES O SEGUROS
Creación de las obras sociales con sus aranceles y restricciones.
Posibilidad de crear nuevas prestaciones.
Control de las restricciones al dar de alta las prestaciones a realizar en
un tratamiento.

STOCK DE ELEMENTOS

Posibilidad de llevar control de stock de los elementos críticos de su


consultorio.
Listado de saldo de elementos.
Listado estadístico de consumo.
Listado de elementos por debajo del punto de pedido.

Página 115
ESTIMACION DE TIEMPO

TAREA Días
A
• RELEVAMIENTOS DE LA EMPRESA 30

B
• RELEVAMIENTO DE EQUIPAMIENTO 30

C
• PRESENTACION DE LA PROPUESTA 30

D
• INSTALACION DE EQUIPAMIENTO 120

E
• INSTALACION DE SOFTWARE 60

F
• CAPACITACION PERSONAL 120

DIAGRAMA DE GANNT

TAREA 30 60 90 120 150 180 210 240 270 300 330 360 390
/DIAS
A
B
C
D
E
F

Página 116
ESTIMACION DE COSTOS

ACTIVIDADES TIEMPO COSTO

RELEVAMIENTO DE LA EMPRESA 30 250

RELEVAMIENTO DEL EQUIPAMIENTO 30 300

PRESENTACION DE LA PROPUESTA 30 250

INSTALACION DEL EQUIPAMIENTO 120 30000

SOFTWARE DE GESTION --------- 100000

INSTALACION DE SOFTWARE 60 15000

COSTO ADICIONAL POR TERMINAL 10 10000

CAPACITACION DEL PERSONAL 120 14400

TOTAL 170200

EQUIPAMIENTO CANTIDAD COSTO

Router 1 950

Medio de Comunicación 300 2000

Terminales 10 35000

TOTAL 37950

COSTO: $ 208150

Página 117
BENEFICIOS Y DESVENTAJAS DE CADA SOLUCIÓN

PROPUESTA 1

Beneficios

• Solución adecuada exactamente a las necesidades de la empresa. Se trabaja


en conjunto con el personal de la empresa estableciendo la funcionalidad del
sistema y asegurando que sus requerimientos se satisfagan
• Aumenta la productividad de gestión de turnos y pago de salarios de médicos
automatizando y mejorando la disponibilidad de la información necesaria para
estas actividades
• Posee una interfaz muy amigable y fácil de manejar para el personal
• Viabilidad y aceptación del personal para su capacitación
• Una vez instalado no tiene costo mensual fijo

Desventajas

• Tendencia a la apatía del personal de la empresa (falta de motivación,


entusiasmo) ante los nuevos cambios no logrando obtener una colaboración
espontánea
• Requiere mucho trabajo de desarrollo e implementación dentro de la empresa

PROPUESTA 2

Beneficios

• Facilidad en la motivación del personal para su capacitación

Desventajas

• Tiene un costo mensual de mantenimiento permanente


• Tiene una cantidad limitada de registros o de lo contrario costo adicional de
acuerdo a la cantidad de registros que se precise
• Cuenta con una gran cantidad de funciones que están fuera del alcance del
problema
• No se conoce si el manejo de turnos responde a las necesidades del lugar

Página 118
CUADRO COMPARATIVO DE AMBAS PROPUESTAS

PROPUESTA 1 PROPUESTA 2

TIEMPO 16 MESES 13 MESES

COSTO $ 217300 $ 208150

SELECCIÓN DE LA SOLUCION

Luego de realizarse la reunión entre el líder del proyecto y el en función del análisis
realizado y para cada una de las alternativas existentes se determina que el enfoque
más apropiado para llevar a buen fin la solución ofrecida es la propuesta 1.

Se define esta propuesta como conveniente debido a que el estudio relación costo -
beneficio dio como resultado una adecuación superior a las necesidades de la
empresa y mayor flexibilidad tanto como para servir de base al desarrollo de nuevas
versiones como para la ampliación de las mismas a posibles nuevas necesidades de
información.

A continuación, entonces, se detalla el plan del proyecto para la construcción del


sistema, especificando tareas y tiempos tentativos.

Página 119
MODELO FUNCIONAL DEL NUEVO SISTEMA

DIAGRAMA DE CONTEXTO

PACIENTE MEDICO

Horario de Atención

O
RI
RESULTADO
ASIGNACION TURNO

RA
HO
PACIENTE_DATOS

AT
ES
PE RN

PU
TU
DI O

S
DO

RE
JEFE DE

ATENCION
CLIENTE 0 AVISO HORARIOS
HABILITADOS
SISTEMA
AVISO ALTA PROFESIONALES
AGENDA GESTION _DATOS

DE PEDIDO AUTORIZACION
PAGO
O
TU
DI TURNOS RE
ES AU SUL
PE TO TA
RI DO
CO DID ZA
O

BR O CI
G

ON
PA

O
AD
AL O
IZ
RE AG

DIRECTOR
P

PAGO MEDICO
EFECTUADO

PACIENTE

Página 120
TABLA DE EVENTOS

Existen 2 funciones principales en un primer nivel que son las de “Asignar


Turnos” a los pacientes y “Pagar a los Médicos”.

Debido a que cada una de estas funciones amerita de detalle debemos


subdividirlas y lo exponemos en un segundo nivel de cada una de ellas en las
siguientes tablas de eventos

NIVEL 2: ASIGNAR TURNOS

Tipo
Entidad Nombre del evento Estímulo Respuesta Función
evento
Externo Médico El médico entrega sus * Horario de * Respuesta Recolectar
horarios de atención Atencion Horario Horarios de
Atencion
Externo Jefe de El jefe de atención a * Aviso Alta * Aviso Habilitar
Atención clientes da de alta la Agenda Horarios Agenda de
al agenda de turnos Habilitados Turnos
Cliente
Externo Paciente El paciente solicita un * Pedido de * Resultado Otorgar
turno turno Asignación turnos
Turno
Externo Paciente El paciente paga su * Pago * Pago Cobrar
consulta Realizado Paciente

NIVEL 2: PAGAR MEDICOS

Tipo
Entidad Nombre del evento Estímulo Respuesta Función
evento
Externo Medico El médico solicita * Pedido * Resultado Autorizar
autorización para cobrar Autorización Autorización Pago
Pago
Externo Medico El médico solicita cobrar * Pedido * Pago Pagar
Cobro Efectuado Médico

Página 121
ETAPA DE DISEÑO

Dividimos esta etapa en 2 fases:

• Diseño Global
• Diseño Detallado

Diseño global

• Tabla de Eventos
• Diagrama de fuljo de datos (en sus componentes principales)
• Diagrama de flujo de datos (subdividido en componentes mas
pequeños)
• Diagrama Entidad-Relación (D.E.R)
• Diagrama Lógico de Datos

Diseño Detallado

• Diagramas de Flujo
• Tablas de Decisión
• Interfaz Hombre-Máquina (Diseño de pantallas)

Página 122
DISEÑO GLOBAL

DIAGRAMA DE FLUJO DE DATOS (DFD) – NIVEL 1

JEFE

RESULTADO
ASIGNACION TURNO
MEDICO ATENCION

Horario de Atención
PACIENTE
O
RA
RI CLIENTE
HO
T A
ES

PE RN
PU

TU
DI O
S
RE

DO
REALIZADO

DE
AVISO HORARIOS
HABILITADOS
PAGO

AVISO ALTA
1 AGENDA

PACIENTE_DATOS
PACIENTE_DATOS
PAGO ASIGNAR
TURNO
TURNOS TURNO
HO
HO RA
RI
PACIENTE
IO RA
UD OS
EST PROFESIONALES_DATOS
RI
O
S

D3 ESTUDIOS D2 PROF_DATOS D4 HORARIOS D5 TURNOS D1 PAC_DATOS

TURNOS PACIENTE_DATOS
ESTUDIO

PROFESIONALES_

2
PE
DID
O AU
PAGAR RE TO
R
AU SULT PAGO IZACI
DATOS

MEDICOS TO AD ON
PROFESIONALES RIZ O
AC
_DATOS ION
PE
D
CO IDO
BR
O
PAGO
DIRECTOR EFECTUADO MEDICO
PROFESIONALES
_DATOS

Página 123
DIAGRAMA DE FLUJO DE DATOS (DFD) – NIVEL 2 – PROCESO DE ASIGNAR TURNOS

AVISO HORARIOS
HABILITADOS JEFE DE
MEDICO H ATENCION
AT OR
EN AR AL CLIENTE
CI I O
P D R O DE
N
R A HO ESP
O T RA UE
F O RI ST
E S
O A 1.1
1.2
S RECOLECTAR
I HABILITAR AVISO ALTA
HORARIOS DE AGENDA
O AGENDA DE
PROFESIONALES
ATENCION
N TURNOS

HO
RA
A

RI
L
_DATOS

O
E

RI
RA
S ESTUDIO TURNO

HO
D2 PROF_DATOS D3 ESTUDIOS D4 HORARIOS D5 TURNOS

TURNO

TURNO
ESTUDIO
RIO
O RA
DI HO O
TU RN
TU
ES PAGO REALIZADO
1.4
1.3
DIRECTOR OTORGAR
COBRAR
PAGO
PACIENTE
TURNOS PA
CIE
NT
E _D
ATO
NO

S
R
TU

PACIENTE PACIENTE
IO O
AC D

_DATOS _DATOS
N
N TA
IG UL
AS ES

D1 PAC_DATOS
R

PACIENTE PACIENTE_DATOS PACIENTE


PEDIDO DE
TURNO

Página 124
DIAGRAMA DE FLUJO DE DATOS (DFD) – NIVEL 2 – PROCESO DE PAGAR MEDICOS

MEDICO

RE
AU SU
TO LT
RI AD
ZA O
CI
ON
2.1
TU
RN
AUTORIZAR O
P
PEDIDO AUTORIZACION
PAGO PA END
PAGO GO IEN
AU PA TE
TO G O
RI
ZA

PR
DO
D5 TURNOS

O
F_D

PA

AU
AT

PA RIZ
GO

TO
GO AD
OS

EF
EC
TU

O
AD
D2 PROF_DATOS

O
PRO 2.2
F_DA
TOS

PROF_DATOS
PAGAR
MEDICO

DO
T UA
EC
EF
GO
PA

MEDICO PEDIDO COBRO

Página 125
DIAGRAMA ENTIDAD-RELACION (DER)

PACIENTE R1 TURNO

R2

MEDICO R3 HORARIO

R4

ESTUDIO

DETALLE DE LAS ENTIDADES

PACIENTE TURNO MEDICO HORARIO ESTUDIO

R1 R2 R3 id R4
nrohistoriaclinica fecha apellido_med especialidad-h estudio
apellido_pac medico-turno nombre_med lunes precio
nombre_pac especialidad-turno direccion_med lunesinicio observaciones-e
dirección_pac paciente-t localidad_med lunesfin memo
localidad_pac estado codpos_med martes
teléfono_pac observaciones-t telefono_med martesinicio
mail_pac nrobono celular martesfin
fechanac abreviatura fax miércoles
sexo estudio-turno mail miercolesinicio
documento precio observaciones-m miercolesfin
nrodocumento importeprofesional especialidad-m jueves
estadocivil pagoautorizado juevesinicio
fechaalta pagado juevesfin
observaciones R1 viernes
medicocabecera viernesinicio
obrasocial viernesfin
nroafiliado sabado
peso sabadoinicio
gruposanguineo sabadofin
talla domingo
presion domingoinicio
lugardetrabajo domingofin
direcciontrabajo observaciones-h
localidadtrabajo R2
telefonotrabajo R3
profesion R4

Página 126
ESQUEMA LOGICO DE DATOS

PACIENTE TURNO HORARIO


Nropaciente (PK) id (PK) Id (PK)
nrohistoriaclinica fecha Medico-h
apellido_pac Medico-turno especialidad-h
nombre_pac especialidad-turno estudio-h
dirección_pac paciente-t lunes
localidad_pac estado lunesinicio
teléfono_pac Observaciones-t lunesfin
mail_pac nrobono martes
fechanac abreviatura martesinicio
sexo estudio-turno martesfin
documento Precio-t miércoles
nrodocumento importeprofesional miercolesinicio
estadocivil Nropaciente miercolesfin
fechaalta agoautorizado jueves
observaciones pagado juevesinicio
medicocabecera juevesfin
obrasocial viernes
nroafiliado viernesinicio
peso viernesfin
gruposanguineo sabado
talla sabadoinicio
presion sabadofin
lugardetrabajo domingo
direcciontrabajo domingoinicio
localidadtrabajo domingofin
telefonotrabajo Observaciones-h
profesion

MEDICO
nromedico (PK)
Apellido_med
Nombre_med
Direccion_med
Localidad_med ESTUDIO
Codpos_med abreviatura (PK)
Telefono_med estudio
celular precio-e
fax Observaciones-e
mail memo
Observaciones-m
especialidad-m

Página 127
DICCIONARIO DE DATOS

Abreviatura (atributo)
Tipo: texto
Longitud: 10

Apellido_Med (atributo)
Tipo: texto
Longitud: 50

Apellido_Pac (atributo)
Tipo: texto
Longitud: 50

Celular (atributo)
Tipo: texto
Longitud: 50

Codpos_Med (atributo)
Tipo: texto
Longitud: 10

Direccion_Med (atributo)
Tipo: texto
Longitud: 50

Dirección_Pac (atributo)
Tipo: texto
Longitud: 50

Direcciontrabajo (atributo)
Tipo: texto
Longitud: 50

Documento (atributo)
Tipo: texto
Longitud: 10

Domingo (atributo)
Tipo: Si/No
Longitud: -

Domingofin (atributo)
Tipo: fecha/hora
Longitud: -

Domingoinicio (atributo)
Tipo: fecha/hora
Longitud: -

Especialidad_h (atributo)
Tipo: texto
Longitud: 50

Página 128
Especialidad_m (atributo)
Tipo: texto
Longitud: 50

Especialidad_turno (atributo)
Tipo: texto
Longitud: 50

Estado (atributo)
Tipo: texto
Longitud: 30

Estadocivil (atributo)
Tipo: texto
Longitud: 25

Estudio (atributo)
Tipo: texto
Longitud: 50

Estudio-h (atributo)
Tipo: texto
Longitud: 50

Estudio-turno (atributo)
Tipo: texto
Longitud: 255

ESTUDIO (ENTIDAD)
R4
estudio
precio
observaciones
memo

Fax (atributo)
Tipo: texto
Longitud: 50
Fecha (atributo)
Tipo: fecha/hora
Longitud: -

Fechaalta (atributo)
Tipo: fecha/hora
Longitud: -

Fechanac (atributo)
Tipo: Fecha/Hora
Longitud: -

Gruposanguineo (atributo)
Tipo: texto
Longitud: 30

Página 129
HORARIO (ENTIDAD)
id
R2
R3
R4
medico
especialidad
estudio
lunes
lunesinicio
lunesfin
martes
martesinicio
martesfin
miércoles
miercolesinicio
miercolesfin
jueves
juevesinicio
juevesfin
viernes
viernesinicio
viernesfin
sabado
sabadoinicio
sabadofin
domingo
domingoinicio
domingofin
observaciones

id (atributo)
Tipo: Autonumérico
Longitud: entero largo

Importeprofesional (atributo)
Tipo: Número
Longitud: doble

Jueves (atributo)
Tipo: Si/No
Longitud: -

Juevesfin (atributo)
Tipo: fecha/hora
Longitud: -

Juevesinicio (atributo)
Tipo: fecha/hora
Longitud: -

Página 130
Localidad-med (atributo)
Tipo: texto
Longitud: 50
Localidad-pac (atributo)
Tipo: texto
Longitud: 50

Localidadtrabajo (atributo)
Tipo: texto
Longitud: 50
Lugardetrabajo (atributo)
Tipo: texto
Longitud: 50

Lunes (atributo)
Tipo: Si/No
Longitud: -

Lunesfin (atributo)
Tipo: fecha/hora
Longitud: -

Lunesinicio (atributo)
Tipo: fecha/hora
Longitud: -

Mail (atributo)
Tipo: texto
Longitud: 50

Mail (atributo)
Tipo: texto
Longitud: 50

Martes (atributo)
Tipo: Si/No
Longitud: -

Martesfin (atributo)
Tipo: fecha/hora
Longitud: -

Martesinicio (atributo)
Tipo: fecha/hora
Longitud

Medico-h (atributo)
Tipo: texto
Longitud: 50

Medico-turno (atributo)
Tipo: texto
Longitud: 50

Página 131
MEDICO (ENTIDAD)
R3
apellido
nombre
direccion
localidad
codpos
telefono
celular
fax
mail
observaciones
especialidad

Medicocabecera (atributo)
Tipo: texto
Longitud: 50

Memo (atributo)
Tipo: memo
Longitud: -

Miércoles (atributo)
Tipo: Si/No
Longitud: -

Miercolesfin (atributo)
Tipo: fecha/hora
Longitud: -

Miercolesinicio (atributo)
Tipo: fecha/hora
Longitud: -

Nombre-pac (atributo)
Tipo: texto
Longitud: 50

Nombre-med (atributo)
Tipo: texto
Longitud: 50

Nroafiliado (atributo)
Tipo: texto
Longitud: 30

Nrobono (atributo)
Tipo: Número
Longitud: entero largo

Nrodocumento (atributo)
Tipo: texto
Longitud: 12

Página 132
Nrohistoriaclinica (atributo)
Tipo: texto
Longitud: 12

Obrasocial (atributo)
Tipo: texto
Longitud: 50

Observaciones (atributo)
Tipo: memo
Longitud: -

Observaciones-e (atributo)
Tipo: texto
Longitud: 255

Observaciones-h (atributo)
Tipo: texto
Longitud: 50

Observaciones-m (atributo)
Tipo: texto
Longitud: 255

Observaciones-t (atributo)
Tipo: texto
Longitud: 255

Paciente-t (atributo)
Tipo: texto
Longitud: 8

Página 133
PACIENTE (ENTIDAD)

R1
nrohistoriaclinica
apellido
nombre
dirección
localidad
teléfono
mail
fechanac
sexo
documento
nrodocumento
estadocivil
fechaalta
observaciones
medicocabecera
obrasocial
nroafiliado
peso
gruposanguineo
talla
presion
lugardetrabajo
direcciontrabajo
localidadtrabajo
telefonotrabajo
profesion

Pagado (atributo)
Tipo: Si/No
Longitud: -
Pagoautorizado (atributo)
Tipo: Si/No
Longitud: -
Peso (atributo)
Tipo: número
Longitud: entero

Precio-e (atributo)
Tipo: Número
Longitud: doble

Precio-t (atributo)
Tipo: número
Longitud: doble

Presion (atributo)
Tipo: texto
Longitud: 50

Página 134
Profesion (atributo)
Tipo: texto
Longitud: 50

R1 (relación 1)

Paciente Turno
tiene Pertenece
N 1
opcional obligatorio
R2 (relación 2)

Turno Horario
tiene pertenece
1 N
obligatorio obligatorio
R3 (relación 3)

Medico Horario
tiene pertenece
N 1
obligatorio obligatorio
R4 (relación 4)

Estudio Horario
tiene pertenece
N 1
obligatorio obligatorio

Sabado (atributo)
Tipo: Si/No
Longitud: -

Sabadofin (atributo)
Tipo: fecha/hora
Longitud: -

Sabadoinicio (atributo)
Tipo: fecha/hora
Longitud: -

Sexo (atributo)
Tipo: texto
Longitud: 1

Talla (atributo)
Tipo: número
Longitud: doble

Telefono-med (atributo)
Tipo: texto
Longitud: 50

Página 135
Telefono-pac (atributo)
Tipo: texto
Longitud: 50
Telefonotrabajo (atributo)
Tipo: texto
Longitud: 50

TURNO (ENTIDAD)

R2
fecha
medico
especialidad
paciente
estado
observaciones
nrobono
abreviatura
estudio
precio
importeprofesional
R1

Viernes (atributo)
Tipo: Si/No
Longitud: -
Viernesfin (atributo)
Tipo: fecha/hora
Longitud: -

Viernesinicio (atributo)
Tipo: fecha/hora
Longitud: -

BALANCEO DFD - DER

DEMORA ENTIDADES QUE INCLUYE


PROF_DATOS MEDICO
ESTUDIOS ESTUDIO
PAC_DATOS PACIENTE
HORARIOS HORARIO
TURNOS TURNO

Página 136
DISEÑO DETALLADO

DIAGRAMA DE FLUJO DE DATOS PARA ABM’S MAESTROS (PACIENTES,


MEDICOS, ESTUDIOS, HORARIOS)

Inicio
1

1-Alta
2- Baja
3- Modificación
4- Salir

Opcion

No
Opcion
Fin
<>4

Si

No No
Opcion Opcion Buscar clave
=1 =2

Si Si No
Clave
Buscar clave está?
Buscar clave
Modificación
Inexistente Si

Si No
Clave Clave Clave “Baja
está? existente está? Inexistente

Si
No

Eliminar registro Ingresar datos a


Ingresar datos del modificar
nuevo registro

Modificar registro
Grabar registro

Página 137
PROCESO PARA HABILITAR AGENDA DE TURNOS

INGRESAR fechadesde
INGRESAR fechahasta
INGRESAR tiempodevisita

LEER TURNOS DEL MEDICO


ENCONTRAR PERIODO INGRESADO EN LAS FECHAS INGRESADAS

Si ENCONTRO entonces
MOSTRAR “Ese periodo ya fue Cargado”
SALIR
Fin si

SI LOS DATOS INGRESADOS SON CORRECTOS entonces

ENCONTRAR HORARIO DE ATENCION DEL MEDICO

vnromedico = tablahorario("nromedico")
vmedico = tablahorario ("medico")
vespecialidad = tablahorario ("especialidad")

Si tablahorario("lunes") = Verdadero entonces


vlunes = verdadero
vhoradesdelunes = tablahorario("lunesinicio")
vhorahastalunes = tablahorario ("lunesfin")
Fin Si

Si tablahorario ("martes") = Verdadero entonces


vmartes = tablahorario verdadero
vhoradesdemartes = tablahorario ("martesinicio")
vhorahastamartes = tablahorario ("martesfin")
Fin Si

Si tablahorario ("miercoles") = Verdadero entonces


vmiercoles = verdadero
vhoradesdemiercoles = tablahorario("miercolesinicio")
vhorahastamiercoles = tablahorario("miercolesfin")
Fin Si

Si tablahorario ("jueves") = Verdadero entonces


vjueves = verdadero
vhoradesdejueves = tablahorario("juevesinicio")
vhorahastajueves = tablahorario("juevesfin")
Fin si

Si tablahorario ("viernes") = Verdadero entonces


vviernes = verdadero
vhoradesdeviernes tablahorario ("viernesinicio")
vhorahastaviernes = tablahorario ("viernesfin")
Fin Si

Si tablahorario ("sabado") = Verdadero Entonces


vsabado = verdadero
vhoradesdesabado = tablahorario ("sabadoinicio")

Página 138
vhorahastasabado = tablahorario ("sabadofin")
Fin Si

Si tablahorario ("domingo") = Verdadero entonces


vdomingo = verdadero
vhoradesdedomingo = tablahorario ("domingoinicio")
vhorahastadomingo = tablahorario ("domingofin")
Fin Si

vfechadesde = fechadesde
vfechahasta = fechahasata

vfechaingresada = vfechadesde INICIALIZA LA FECHA INGRESADA PARA


COMENZAR CON EL WHILE Y LAS ALTAS AUTOMATICAS DE CADA DIA DE
ATENCION

HACER MIENTRAS vfechahasta > vfechaingresada BUCLE PARA CARGA


MASIVA DE DATOS

HACER CASOS DIASEMANA(vfechaingresada)


DIASEMANA 1
SI vdomingo = verdadero entonces
HACER cargadeturnos horario de atención (vhoradesdedomingo,
vhorahastadomingo)
Fin Si

DIASEMANA 2
Si vlunes = True entonces
cargaraltas vhoradesdelunes, vhorahastalunes
End If

DIASEMANA 3
Si vmartes = entonces Then
HACER cargadeturnos horario de atención vhoradesdemartes,
vhorahastamartes
Fin Si

DIASEMANA 4
Si vmiercoles = True entonces
HACER cargadeturnos horario de atención vhoradesdemiercoles,
vhorahastamiercoles
Fin Si

DIASEMANA 5
Si vjueves = True entonces
HACER cargadeturnos horario de atención vhoradesdejueves,
vhorahastajueves
Fin Si

DIASEMANA 6
Si vviernes = True entonces
HACER cargadeturnos horario de atención vhoradesdeviernes,
vhorahastaviernes
Fin Si

Página 139
DIASEMANA 7
Si vsabado = True entonces
HACER cargadeturnos horario de atención vhoradesdesabado,
vhorahastasabado
Fin Si

Fin Hacer Casos

SUMAR 1 A vfechaingresada

FIN HACER MIENTRAS

MOSTRAR "Alta Procesada Correctamente"

Fin Si

---------- ---------

PROCEDIMIENTO cargadeturnos (xhoradesde, xhorahasta)

vhoraingresada = xhoradesde

Mientras xhorahasta > vhoraingresada

INSERTAR registro en la tabla de TURNOS con vhoraingresada

SUMAR vtiempodevisita a vhoraingresada

FinMientras

PROCESO PARA OTORGAR TURNOS

INGRESAR MEDICO
INGRESAR FECHA

LEER HORARIOS DE ATENCION


MOSTRAR HORARIOS DE ATENCION

SELECCIONAR HORARIODEATENCION
SI no hay ningun paciente asignado ENTONCES
INGRESAR Paciente
INGRESAR NroBono
INGRESAR Importe
REEMPLAZAR datos ingresados en la tabla TURNOS
Fin_Si

Página 140
PROCESO PARA PAGAR A MEDICOS

INGRESAR MEDICO
INGRESAR FECHADESDE
INGRESAR FECHAHASTA

HACER MIENTRAS haya BONOS en TURNOS entre RANGO FECHA


INGRESADO

MOSTRAR fecha, estudio, nrobono, precio, medico


LEER siguiente TURNO

FIN_HACER_MIENTRAS

INGRESAR importes a pagar al profesional

HACER MIENTRAS haya BONOS en TURNOS entre RANGO FECHA


INGRESADO

ACTUALIZAR importe a pagar al profesional

FIN_HACER_MIENTRAS

Restricción para calcular el importe a pagar al profesional

1 2 3 4 5 6 7 8

ANTIGÜEDAD < 15 AÑOS S S S S N N N N


ANTIGÜEDAD >= 15 AÑOS S S N N S S N N
PLUS ESPECIALIDAD S N S N S N S N
IMPORTE 55 %
IMPORTE 60 %
IMPORTE 65 %

El número de condiciones es 3 y el numero de casos 8, que es 2 3, por lo que en


principio todo está correcto. Ahora podríamos eliminar los casos inviables (1, 2, 7 y 8)
y simplificar la tabla de decisión, que quedaría:

3 4 5 6

ANTIGÜEDAD < 15 AÑOS S S N N


ANTIGÜEDAD >= 15 AÑOS N N S S
PLUS ESPECIALIDAD S N S N
IMPORTE 55 % X
IMPORTE 60 % X X
IMPORTE 65 % X

Página 141
BASE DE DATOS: DISEÑO FISICO

ESTUDIOS

HORARIOS

Página 142
MEDICOS

TURNOS

Página 143
PACIENTES

Página 144
“DISEÑO DE PANTALLAS”

ACCESO Y CLAVE

Al ingresar el sistema pedirá que se identifique con su nombre de usuario y su clave.


Con ese usuario y clave podrá operar todas las opciones del sistema para las que
tenga autorización por parte del administrador.

MENU DEL SISTEMA

ABM PACIENTES

a) Datos Personales

b) Datos Médicos

Página 145
Página 146
PACIENTES

Características destacadas

* Es posible la registración de datos médicos y laborales de cada paciente

* La dinámica de la pantalla permite Agregar, Modificar y Eliminar información

* Búsqueda dinámica x apellido del paciente (primeras letras del apellido paterno)

* Queda asociado el paciente a su obra social correspondiente

* Se conoce el medico de cabecera del paciente

Página 147
ABM MEDICOS

A) PESTAÑA ABM

B) PESTAÑA BUSQUEDA

Página 148
MEDICOS

Características destacadas

* Registrar la ficha de identificación del profesional.

* Quedara asociada la especialidad del medico con el fin de poder luego asignar
turnos por especialidad

* La dinámica de la pantalla permite Agregar, Modificar y Eliminar información

ABM ESTUDIOS

ESTUDIOS

Características destacadas

* Registrar la ficha de identificación de los estudios.

* Quedara asociado el precio de cada uno de los estudios ingresados

* La dinámica de la pantalla permite Agregar, Modificar y Eliminar información

* Búsqueda dinámica x diferentes criterios (primeras letras del estudio, abreviatura)

Página 149
HORARIOS MEDICOS

HORARIOS DE ATENCION DE PROFESIONALES

Características destacadas

* Registración los horarios de atención de profesionales.

* Quedaran asociados de forma automática los horarios a la especialidad del


medico con el fin de poder luego asignar turnos por especialidad

PERMITE EL INGRESO DE HORARIOS DE ATENCION DE CADA PROFESIONAL /


ESTUDIO CON EL OBJETIVO DE GENERAR TURNOS SOLO EN LOS HORARIOS
EXISTENTES !!!

ES FLEXIBLE A CAMBIOS DE HORARIOS !!!!

Página 150
ALTA DE TURNOS MEDICOS - PROCESO AUTOMATICO DE ALTA DE TURNOS !!

PROCESO AUTOMATICO DE ALTA DE TURNOS MEDICOS !!

Características destacadas

* Este proceso va dando de alta las fechas indicadas para habilitar los turnos en los
horarios indicados para el profesional con su especialidad

• AUTOMATICAMENTE GENERA EN LA TABLA DE TURNOS UNA SERIE


DE REGISTROS QUE HABILITAN LAS FECHAS Y HORARIOS PARA
PODER DAR TURNO A UN PACIENTE EN UN DETERMINADO
HORARIO

Página 151
TURNOS PACIENTES

Página 152
TURNOS PACIENTES – RESERVA DE TURNOS A
PACIENTES

Características destacadas

* Al seleccionar el médico, automáticamente aparece su especialidad y habilita en


el calendario las fechas y horarios disponibles. Si el médico cuenta con mas de una
especialidad voy a poder seleccionar por cual de ellas deseo consultarlo y recién
en ese momento se habilitará el calendario correspondiente

* Al seleccionar la especialidad, me da la opción del médico que deseo consultar y


al seleccionarlo me habilita sus fechas y horarios disponibles

* Al dar un turno me pedirá el nro. de bono y el importe. Cuando selecciono el


estudio y/o consulta automáticamente me dará el importe correspondiente

PLANILLA DIARIA

Página 153
PLANILLA DIARIA

Características destacadas

* La planilla permitirá consultar por fecha, médico, especialidad y/o nro. de bono el
importe pagado por el paciente y el importe que le corresponde al profesional por
cada una de sus consultas y/o estudios realizados

BACKUP

BACKUP

Características destacadas

* Permite realizar una copia de seguridad del total de la información generando un


archivo .zip en la carpeta seleccionada

* ZIP o zip es un formato de almacenamiento sin pérdida, muy utilizado para la


compresión de datos.

Página 154
PERMISOS DE USUARIOS - ABM USUARIOS

PERMISOS DE USUARIOS

Características destacadas

* Si el sistema va a ser utilizado por varias personas, cada una debe tener un
usuario y debe identificarse con su nombre y contraseña para que el sistema sepa
quién está sentado delante.

* Debe existir como mínimo un administrador con control total sobre el sistema,
mientras que los otros están más limitados. Los derechos sobre el sistema que
puede tener cada usuario se controlan mediante la carga de su nombre, apellido,
usuario y password con la que va a acceder y permisos a cada uno de los módulos
que se desee.

Página 155
ETAPA DE CODIFICACION

“CODIFICACION”

ABM DE MEDICOS

Vamos a explicar los pasos a seguir para crear un ABM (Alta, Baja, Modificaciones) y
vamos a ejemplificarlo con los datos de los médicos.

Para poder escribir el código de un ABM vamos a necesitar establecer una conexión
entre la base de datos definida en access y el entorno de desarrollo de visual.

Los pasos a seguir son:

• Establecer los datos de conexión


• Abrir la conexión
• Ejecutar la sentencia sql que se precise
• Cerrar la conexión

La apertura y el cierre de la conexión siempre vamos a tratar de llevarla a cabo una


única vez, y no en cada ejecución de la sentencia sql.
Por esto vamos a utilizar la apertura de la conexión en el evento load del formulario y
el cierre en el evento unload del mismo.

Estos pasos tienen cierta complejidad y reutilización de código, por lo que para la
conexión y conversión de datos se utilizan procedimientos definidos en módulos

Preparando todo !!

1) Creamos un proyecto nuevo

2) En el menú proyecto Referencias seleccionamos Microsoft ActiveX Data


Objects 2.6 Library

3) En el menú proyecto elegimos agregar modulo y creamos los siguientes


módulos

Página 156
a) Modulo Datos.bas

Public vcolumnas() As String

‘Este procedimiento es el que nos va a permitir concretar el paso de abrir la conexión a


la base de datos deseada

Public Sub AbrirConeccion(XConeccion, Xdbconeccion, Xdbpath, Optional Xclave)


Dim Xcadenaconeccion As String

On Error GoTo cnError


Set XConeccion = New Connection
XConeccion.Mode = adModeReadWrite

Xcadenaconeccion = "provider=" & Xdbconeccion & ";Data Source=" & Xdbpath & ";"
If Not IsNull(Xclave) Then
Xcadenaconeccion = Xcadenaconeccion & Xclave
End If
Xcadenaconeccion = Xcadenaconeccion & ";persist security info=false"
XConeccion.ConnectionString = Xcadenaconeccion
XConeccion.Open

Exit Sub

cnError:

Select Case Err.Number


'Si no esta la base
Case -2147467259
MsgBox "No se encuentra la base de datos, " & _
"Consulte al administrador del sistema", _
vbCritical & vbOKOnly, _
"Error Base de datos"
End
'Mal PassWord
Case -2147217843
MsgBox "La contraseña de la Base de Datos a Cambiado!", _
vbCritical & vbOKOnly, "Error contraseña"
'Cualquier Otro Error
Case Else
RecordError "Modulo Conexion"
MsgBox "Error en la conexion a la base de datos, " & vbCrLf & _
"El Sistema se Cerrara", vbCritical + vbInformation, Title
End
End Select

End Sub

Página 157
‘Este procedimiento es el que almacena en un archivo .txt la información
correspondiente a errores que hayan ocurrido

Public Sub RecordError(Name As String)

Open App.Path & "\Logs\Errores.txt" For Append As #1


Print #1, Name & "; " & Err.Number & "; " & Err.Description & "; " & Now()
Close #1

End Sub

‘Este procedimiento es el que nos va a permitir concretar el paso de cerrar la conexión


que haya sido abierta previamente

Public Sub CerrarConeccion(XConeccion)

If XConeccion.State = 1 Then
XConeccion.Close
Set XConeccion = Nothing
End If

End Sub

Public Sub realizarSQL(xsql, XConeccion)

With XConeccion
.BeginTrans
.Execute xsql
If Err.Number <> 0 Then
MsgBox ("estoy en el error")
.RollbackTrans
Else
.CommitTrans
End If
End With

End Sub

‘Este procedimiento es el que nos va a permitir concretar el paso de abrir un recordset


a utilizar

Public Sub AbrirRecordsetTabla(XTabla, XStringTabla, XConeccion)


Set XTabla = New ADODB.Recordset
XTabla.CursorType = adOpenKeyset
XTabla.LockType = adLockOptimistic
XTabla.Open XStringTabla, XConeccion, , , adCmdTable
End Sub

Página 158
‘Este procedimiento es el que nos va a permitir concretar el paso de abrir un recordset
que responda al resultado de una instrucción SQL escrita previamente

Public Sub AbrirRecordsetSQL(XTabla, xsql, XConeccion)

On Error GoTo sqlError


Set XTabla = New ADODB.Recordset
'XTabla.Open xsql, xconeccion, adOpenStatic, adLockReadOnly

XTabla.Open xsql, XConeccion, adOpenDynamic, adLockOptimistic


XConeccion.Execute xsql, , adExecuteNoRecords
Exit Sub
sqlError:
Select Case Err.Number
'Si no esta la base
Case -2147467259
MsgBox ("entro a error no esta la base")
Case Else
'RecordError "Modulo Conexion"
MsgBox "Error en la conexion a la base de datos, " & vbCrLf & _
"El Sistema se Cerrara", vbCritical + vbInformation, Title
End
End Select

End Sub

‘Este procedimiento es el que nos va a permitir concretar el paso de abrir un recordset


que responda al resultado de una instrucción SQL escrita previamente

Public Sub EjecutarSQL(XTabla, xsql, XConeccion)


Set XTabla = New ADODB.Recordset
XConeccion.Execute xsql, , adExecuteNoRecords
Set XTabla = Nothing
End Sub

Public Sub CerrarTabla(XTabla)


If XTabla.State = 1 Then
XTabla.Close
Set XTabla = Nothing
End If
End Sub

‘Este procedimiento nos muestra el nombre de los campos de la tabla

Public Sub nombrecolumnasbase(XConeccion, XTabla, xtablastring)

datos.AbrirRecordsetTabla XTabla, xtablastring, XConeccion


totalcampos = XTabla.Fields.Count - 1
ReDim vcolumnas(totalcampos)
For cont = 0 To totalcampos
vcolumnas(cont) = XTabla.Fields.Item(cont).Name
Next
datos.CerrarTabla XTabla

End Sub

Página 159
'***************************************************************************
' Ejemplo para verificar si un archivo existe _
'***************************************************************************
'Función que abre el archivo y verifica si existe
Public Function Verificar(ElArchivo As String) As Boolean

On Local Error Resume Next


Open ElArchivo For Input As #1

If Err <> 0 Then


Verificar = False
Else
Verificar = True
End If

Close #1

End Function

'***************************************************************************
' Ejemplo para verificar si una tabla se encuentra en la base de datos _
Nota: Agregar la Referencia a -->> Microsoft Activex Data Objects
'***************************************************************************
Function Tabla_Existe(ByVal Path_BD As String, _
ByVal La_Tabla As String) As Boolean

On Error GoTo Err_Sub

Const Cadena As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="

Dim datos() As String


Dim i As Integer
Dim cnn As Connection

'Nueva conexión Ado


Set cnn = New Connection

'Abre la base de datos


cnn.Open Cadena & Path_BD

'Declara y abre el recordset


Dim RS As Recordset
Set RS = cnn.OpenSchema(adSchemaTables)

datos = Split(RS.GetString, vbTab)

For i = 0 To UBound(datos)
'Compara el valor,( la tabla )
If Trim(UCase(datos(i))) = Trim(UCase(La_Tabla)) Then
Tabla_Existe = True ' La tabla existe
Exit For
End If
Next

Página 160
'cierra el recordset y la base de datos
On Error Resume Next
RS.Close
Set RS = Nothing
cnn.Close
Set cnn = Nothing
Exit Function
'error
Err_Sub:
MsgBox Err.Description, vbCritical
On Error Resume Next
RS.Close
Set RS = Nothing
cnn.Close
Set cnn = Nothing
End Function

Una vez definidos los módulos a utilizar con sus procedimientos estamos en
condiciones de comenzar a escribir el código del ABM en el formulario

ABM DEL FORMULARIO

‘DECLARACION DE VARIABLES GENERAL/DECLARACIONES

Option Explicit
Dim sqlmedicos As ADODB.Recordset

Dim sql As String


Dim resp

'variables para campos de base


Dim vnromedico, vapellido, vnombre, vdireccion, vlocalidad, vcodpos, vtelefono As
String
Dim vcelular, vfax, vmail, vespecialidad As String
Dim vobservaciones As String
Dim vconsultadni As String

Private Sub Form_Load()


'abrir conexion
modclinica.datosconeccion
datos.AbrirConeccion modclinica.coneccion, modclinica.dbconeccion,
modclinica.dbpath, modclinica.dbpass

'cargar imagenes de los botones


Cargas.ImagenBoton btAgregar, "CRDFLE11.ico"
Cargas.ImagenBoton btModificar, "note16.ico"
Cargas.ImagenBoton btBorrar, "delete.ico"
Cargas.ImagenBoton btLimpiar, "cancel1.ico"
Cargas.ImagenBoton btListar, "impresora.bmp"
Cargas.ImagenBoton btbuscar, "BINOCULR.ico"
Cargas.ImagenBoton btSalir, "Salir1.ico"
Cargas.ImagenBoton btSalir02, "Salir1.ico"

End Sub

Página 161
PESTAÑA DE ABM
* EVENTO CLICK DE CADA UNO DE LOS BOTONES

Private Sub btAgregar_Click()

If ValidacionDatosFormulario() Then
cargavariables
sql = "INSERT INTO medicos (nromedico, apellido, nombre, direccion, "
sql = sql + "localidad, codpos, telefono, celular, "
sql = sql + "fax, mail, especialidad, "
sql = sql + "observaciones) "
sql = sql + "VALUES ('" + txtnromedico + "'"
sql = sql + ", '" + vapellido + "'"
sql = sql + ", '" + vnombre + "'"
sql = sql + ", '" + vdireccion + "'"
sql = sql + ", '" + vlocalidad + "'"
sql = sql + ", '" + vcodpos + "'"
sql = sql + ", '" + vtelefono + "'"
sql = sql + ", '" + vcelular + "'"
sql = sql + ", '" + vfax + "'"
sql = sql + ", '" + vmail + "'"
sql = sql + ", '" + vespecialidad + "'"
sql = sql + ", '" + vobservaciones + "'"
sql = sql + ")"
datos.realizarSQL sql, modclinica.coneccion
limpiar
btAgregar.Enabled = False
btModificar.Enabled = False
btLimpiar.Enabled = False
txtnromedico.SetFocus
End If

End Sub

Private Sub btModificar_Click()

If ValidacionDatosFormulario() Then
cargavariables
sql = "UPDATE medicos SET medicos.nromedico = " + vnromedico
sql = sql + ", medicos.apellido = '" + vapellido + "' "
sql = sql + ", medicos.nombre = '" + vnombre + "' "
sql = sql + ", medicos.direccion = '" + vdireccion + "' "
sql = sql + ", medicos.localidad = '" + vlocalidad + "' "
sql = sql + ", medicos.codpos = '" + vcodpos + "' "
sql = sql + ", medicos.telefono = '" + vtelefono + "' "
sql = sql + ", medicos.celular = '" + vcelular + "' "
sql = sql + ", medicos.fax = '" + vfax + "' "
sql = sql + ", medicos.mail = '" + vmail + "' "
sql = sql + ", medicos.especialidad = '" + vespecialidad + "' "
sql = sql + ", medicos.observaciones = '" + vobservaciones + "' "
sql = sql + " WHERE nromedico = " + txtnromedico
datos.realizarSQL sql, modclinica.coneccion
limpiar
btAgregar.Enabled = False
btModificar.Enabled = False
btBorrar.Enabled = False
btLimpiar.Enabled = False
txtnromedico.SetFocus
End If
End Sub

Página 162
Private Sub btBorrar_Click()

resp = MsgBox("esta seguro?", vbYesNo + vbQuestion, "cuidad se eliminara un


registro")
If (resp = vbYes) Then

'Elimina los items correspondientes a la tabla de factura


On Error GoTo Solucion1
sql = "DELETE FROM medicos Where nromedico = " + txtnromedico
datos.realizarSQL sql, modclinica.coneccion
MsgBox "El registro fue eliminado", vbInformation, "Registro Eliminado "
limpiar
btLimpiar.Enabled = False
btBorrar.Enabled = False
Else
MsgBox "El registro no fue eliminado", vbInformation, "fue su decision ... "
btBorrar.Enabled = True
btLimpiar.Enabled = True
End If

btAgregar.Enabled = False
btModificar.Enabled = False
txtnromedico.SetFocus
Exit Sub

Solucion1:
MsgBox "error:" & Err & Chr$(13) & Err.Description, vbExclamation, "Existe un
problema"

End Sub

Private Sub btSalir_Click()


Unload Me
End Sub

* PROCEDIMIENTOS Y FUNCIONES

‘Este procedimiento pasa los datos escritos en los textbox a variables

Public Sub cargavariables()

vnromedico = Trim(txtnromedico)
vapellido = Trim(txtapellido)
vnombre = Trim(txtnombre)
vdireccion = Trim(txtdireccion)
vlocalidad = Trim(txtlocalidad)
vcodpos = Trim(txtcodpos)
vtelefono = Trim(txtelefono)
vcelular = Trim(txtcelular)
vfax = Trim(txtfax)
vmail = Trim(txtmail)
vespecialidad = Trim(txtespecialidad)
vobservaciones = Trim(txtobservaciones)

End Sub

Página 163
‘Este procedimiento muestra los datos existentes en un registro a los textbox

Public Sub BaseAText(XTabla)

txtnromedico = XTabla.Fields("nromedico")

If IsNull(XTabla.Fields("apellido")) Then
txtapellido = ""
Else
txtapellido = XTabla.Fields("apellido")
End If

If IsNull(XTabla.Fields("nombre")) Then
txtnombre = ""
Else
txtnombre = XTabla.Fields("nombre")
End If

If IsNull(XTabla.Fields("Direccion")) Then
txtdireccion = ""
Else
txtdireccion = XTabla.Fields("Direccion")
End If

If IsNull(XTabla.Fields("localidad")) Then
txtlocalidad = ""
Else
txtlocalidad = XTabla.Fields("Localidad")
End If

If IsNull(XTabla.Fields("codpos")) Then
txtcodpos = ""
Else
txtcodpos = Trim(XTabla.Fields("codpos"))
End If

If IsNull(XTabla.Fields("telefono")) Then
txtelefono = ""
Else
txtelefono = XTabla.Fields("telefono")
End If

If IsNull(XTabla.Fields("celular")) Then
txtcelular = ""
Else
txtcelular = XTabla.Fields("celular")
End If

If IsNull(XTabla.Fields("FAX")) Then
txtfax = ""
Else
txtfax = XTabla.Fields("FAX")
End If

Página 164
If IsNull(XTabla.Fields("Mail")) Then
txtmail = ""
Else
txtmail = XTabla.Fields("Mail")
End If

'Cargas.mostraritemcombo cbxiva, XTabla.Fields("iva")

If IsNull(XTabla.Fields("especialidad")) Then
txtespecialidad = ""
Else
txtespecialidad = XTabla.Fields("especialidad")
End If

If IsNull(XTabla.Fields("observaciones")) Then
txtobservaciones = ""
Else
txtobservaciones = XTabla.Fields("observaciones")
End If

End Sub

‘Este procedimiento limpia toda la pantalla dejando los textbox en blanco … no elimina
registros

Public Sub limpiar()


txtnromedico = ""
txtapellido = ""
txtnombre = ""
txtdireccion = ""
txtlocalidad = ""
txtcodpos = ""
txtelefono = ""
txtcelular = ""
txtfax = ""
txtmail = ""
txtespecialidad = ""
txtobservaciones = ""
msflexmedicos.Clear
TituloGrilla
txBuscar = ""

End Sub

Private Sub btLimpiar_Click()

Limpiar
btAgregar.Enabled = False
btModificar.Enabled = False
btBorrar.Enabled = False
btLimpiar.Enabled = False
txtnromedico.SetFocus

End Sub

Página 165
‘ Esta función verifica si la carga de cada uno de los datos es correcta y devuelve valor
verdadero o falso de acuerdo a si los datos son o no correctos

Private Function ValidacionDatosFormulario() As Boolean


Dim k As Integer
ValidacionDatosFormulario = False

If Trim(txtapellido) = "" Then


k = MsgBox("Debe Ingresar el apellido del medico", vbCritical, " Nombre y Apellido")
txtapellido.SetFocus
Exit Function
End If

If Trim(txtnombre) = "" Then


k = MsgBox("Debe Ingresar el nombre del medico", vbCritical, " Nombre y Apellido")
txtapellido.SetFocus
Exit Function
End If

If Trim(txtdireccion) = "" Then


k = MsgBox("Debe Ingresar la Dirección", vbCritical, "Direccion")
txtdireccion.SetFocus
Exit Function
End If

If Trim(txtespecialidad) = "" Then


k = MsgBox("Debe Ingresar la Especialidad", vbCritical, "Especialidad")
txtespecialidad.SetFocus
Exit Function
End If

If Len(Trim(txtobservaciones)) > 255 Then


k = MsgBox("Solo puede ingresar hasta 255 caracteres", vbCritical, "
Observaciones ")
txtobservaciones.SetFocus
Exit Function
End If

ValidacionDatosFormulario = True

End Function

Página 166
* EVENTO LOSTFOCUS DE TXTNROMEDICO (TEXTBOX DONDE SE INGRESA EL
NUMERO DE MEDICO

Dinámica: Al ingresar el número de médico, mediante una instrucción sql verifica en primer
lugar si es numérico (isnumeric) y si el médico existe o no existe.
Para llevar a cabo este último paso; luego de ejecutar una instrucción sql utiliza la condición
“sqlmedicos.EOF And sqlmedicos.BOF”. (EOF: END OF FILE Fin de Archivo / BOF: BEGIN
OF FILE: Comienzo de Archivo).

Si el resultado de esta condición es verdadero significa que no hay ingresado ningún médico
con el número consultado (ya que coincide el comienzo y el fin de archivo, ambos son
verdaderos, al mismo tiempo hay un comienzo y un fin sin ningún registro en el medio) y por lo
tanto habilita el “ALTA” del mismo y si el resultado es falso significa que el número de médico
consultado ha sido ingresado y por lo tanto muestra sus datos y habilita la posibilidad de
“MODIFICAR” o “ELIMINAR”.

Private Sub txtnromedico_LostFocus()


Dim mensaje As String

If Trim(txtnromedico.Text) <> "" Then


'Apertura y cierre de recordset para instruccion SQL
If IsNumeric(txtnromedico.Text) Then
sql = "SELECT * FROM medicos WHERE nromedico = " + txtnromedico
datos.AbrirRecordsetSQL sqlmedicos, sql, modclinica.coneccion
If sqlmedicos.EOF And sqlmedicos.BOF Then
btAgregar.Enabled = True
btModificar.Enabled = False
btBorrar.Enabled = False
btLimpiar.Enabled = True
Else
btAgregar.Enabled = False
btModificar.Enabled = True
btBorrar.Enabled = True
btLimpiar.Enabled = True
BaseAText sqlmedicos
End If
datos.CerrarTabla sqlmedicos
Else
mensaje = MsgBox("Debe Ingresar un Dato Numérico", vbOKOnly + vbInformation,
"Error")
End If
Else
sql = "SELECT MAX(val(nromedico)) as maximo FROM medicos"
datos.AbrirRecordsetSQL sqlmedicos, sql, modclinica.coneccion

If IsNull(sqlmedicos.Fields("maximo")) Then
txtnromedico = 1
Else
txtnromedico = sqlmedicos.Fields("maximo") + 1
End If

btAgregar.Enabled = True
btModificar.Enabled = False
btBorrar.Enabled = False
btLimpiar.Enabled = True
datos.CerrarTabla sqlmedicos
End If

End Sub

Página 167
* EVENTO KEYPRESS DE CADA UNO DE LOS TEXTBOX

Private Sub txtnromedico_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then 'And Trim(txtnromedico.Text) <> "" Then


txtapellido.SetFocus
End If

End Sub

Private Sub txtapellido_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
txtnombre.SetFocus
End If

End Sub

Private Sub txtnombre_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
txtdireccion.SetFocus
End If

End Sub

Private Sub txtdireccion_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
txtlocalidad.SetFocus
End If

End Sub

Private Sub txtlocalidad_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
txtcodpos.SetFocus
End If

End Sub

Private Sub txtcodpos_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then
txtelefono.SetFocus
End If
End Sub

Private Sub txtelefono_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
txtcelular.SetFocus
End If

End Sub

Página 168
Private Sub txtcelular_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
txtfax.SetFocus
End If

End Sub

Private Sub txtfax_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
txtmail.SetFocus
End If

End Sub

Private Sub txtmail_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
txtespecialidad.SetFocus
End If

End Sub

Private Sub txtespecialidad_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
txtobservaciones.SetFocus
End If

End Sub

Private Sub txtobservaciones_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
If btAgregar.Enabled = True Then
btAgregar.SetFocus
ElseIf btModificar.Enabled = True Then
btModificar.SetFocus
Else
txtnromedico.SetFocus
End If
End If

End Sub

Página 169
EVENTO CLICK DE LAS PESTAÑAS

Private Sub sstabmedicos_Click(PreviousTab As Integer)

If sstabmedicos.Tab = 0 Then
frcabecera.Enabled = True
frbotonera.Visible = True
ElseIf sstabmedicos.Tab = 1 Then
frcabecera.Enabled = False
frbotonera.Visible = False
cargarbusqueda

End If

End Sub

PESTAÑA DE BUSQUEDA

Private Sub txBuscar_Change()

cargarbusqueda

End Sub

Private Sub opnrocliente_Click()

txBuscar.Text = ""
cargarbusqueda

End Sub

Private Sub oprazonsocial_Click()

txBuscar.Text = ""
cargarbusqueda

End Sub

Private Sub btBuscar_Click()

cargarbusqueda

End Sub

Página 170
Private Sub msflexmedicos_Click()

msflexmedicos.col = 1
txtnromedico = msflexmedicos.Text

If Trim(txtnromedico = "") Then


limpiar
Else
sql = "SELECT * FROM medicos WHERE nromedico = " + txtnromedico
datos.AbrirRecordsetSQL sqlmedicos, sql, modclinica.coneccion
BaseAText sqlmedicos
datos.CerrarTabla sqlmedicos
End If

sstabmedicos.Tab = 0
btAgregar.Enabled = False
btModificar.Enabled = True
btBorrar.Enabled = True
btLimpiar.Enabled = True

End Sub

Public Sub cargarbusqueda()

sql = "SELECT nromedico, apellido, direccion, telefono "


sql = sql + " FROM medicos"
If opnrocliente.Value Then

If Trim(txBuscar) = "" Then


sql = sql + " WHERE TRUE"
Else
sql = sql + " WHERE [nromedico] = " + Trim(txBuscar.Text)
End If

End If

If oprazonsocial.Value Then
If Trim(txBuscar) = "" Then
sql = sql + " WHERE true"
Else
sql = sql + " WHERE [apellido] LIKE '" + Trim(txBuscar.Text) + "%'"
End If
End If

If opnrocliente Then
sql = sql + " ORDER BY nromedico"
End If

If oprazonsocial Then
sql = sql + " ORDER BY apellido"
End If

Página 171
If opnrocliente And Trim(txBuscar) <> "" And Not IsNumeric(txBuscar) Then
MsgBox ("Error")
Exit Sub
Else
datos.AbrirRecordsetSQL sqlmedicos, sql, modclinica.coneccion
msflexmedicos.Clear
TituloGrilla
Cargas.CargarGrilla msflexmedicos, sqlmedicos
datos.CerrarTabla sqlmedicos
End If

End Sub

Public Sub TituloGrilla()

Dim cont As Byte


msflexmedicos.ColWidth(0) = 0
msflexmedicos.ColWidth(1) = 0 'nrocliente
msflexmedicos.ColWidth(2) = 2000 'razonsocial
msflexmedicos.ColWidth(3) = 3500 'direccion
msflexmedicos.ColWidth(4) = 2000 'telefono

msflexmedicos.Row = 0

For cont = 1 To 4

msflexmedicos.col = cont
Select Case cont
Case 2: msflexmedicos.Text = "Razon Social"
Case 3: msflexmedicos.Text = "Direccion"
Case 4: msflexmedicos.Text = "Telefono"
End Select
Next

End Sub

Private Sub btSalir02_Click()

Unload Me

End Sub

Private Sub Form_Unload(Cancel As Integer)

datos.CerrarConeccion modclinica.coneccion

End Sub

Página 172
ABM DE HORARIOS MEDICOS

EL Código que se escribe para esta pantalla logra almacenar en la tabla de horarios
los días y horas de atención de los médicos.

Ejemplo:

Se trata de un código de un ABM pero trabajando con casillas de verificación, datos de


tipo fecha y booleanos. Estas diferencias se marcan en el código con color.

Para facilitar el manejo de los tipos de datos y conversiones utilizamos un módulo con
la definición de varios procedimientos de conversión

Página 173
En el menú proyecto elegimos agregar modulo y creamos el siguiente módulo

a) Modulo Conver.bas

' Conver.Bas
' Modulo de Conversiones de tipo
'
' Convencion:
' Siempre que se quiera representar el tipo de datos en un archivo
' de parametros colocaremos el siguiente código
' T Texto
' F Fecha
' M Moneda (Currency)
' D Doble
' I Entero
' L Largo

' TexAFecha(txt) --> date


' Convierte un texto en una fecha. Si el texto es "" Coloca 1/1/100

Public Function TexAFecha(Txt As String) As Date


If Txt = "" Then
TexAFecha = CDate("1/1/100")
Else
TexAFecha = CDate(Txt)
End If
End Function

' FechaATex(fecha) --> text


' Convierte una fecha en un texto. Si la fecha es 1/1/100 coloca ""

Public Function FechaATex(ByVal Fecha As Date) As String


If Fecha = CDate("1/1/100") Then
FechaATex = ""
Else
FechaATex = Format(Fecha, "dd/mm/yyyy")
End If
End Function

' FechaAmericana(Fecha) --> texto


' Convierte una variable fecha a una cadena de con la fecha en el formato
' americano, mm/dd/aa

Public Function FechaAmericana(Fecha As Date) As String


FechaAmericana = Str(Month(Fecha)) + "/" + _
Str(Day(Fecha)) + "/" + _
Str(Year(Fecha))
End Function

Página 174
' TexACur(txt) --> Cur
' Convierte un texto en un Tipo Currency. Si el texto es "" Coloca 0

Public Function TexACur(Txt As String) As Currency


If Txt = "" Then
TexACur = CCur("0")
Else
TexACur = CCur(Txt)
End If
End Function

' CurATex(Cur) --> txt


' Convierte un Currency en string. Si el texto es 0 coloca ""

Public Function CurATex(ByVal Cur As Currency) As String


If Cur = 0 Then
CurATex = ""
Else
CurATex = Format(Cur, "Currency")
End If
End Function

' TexADou(txt) --> Double


' Convierte un texto en un Tipo Double. Si el texto es "" Coloca 0

Public Function TexADou(Txt As String) As Double


If Txt = "" Then
TexADou = CDbl("0")
Else
TexADou = CDbl(Txt)
End If
End Function

' DouATex(Double) --> txt


' Convierte un Double en string. Si el texto es 0 coloca ""

Public Function DouATex(ByVal Dou As Double) As String


If Dou = 0 Then
DouATex = ""
Else
DouATex = Format(Dou, "General Number")
End If
End Function

' DouATexCero(Dou) --> txt


' Idem DouATex pero si es cero devuelve 0

Public Function DouATexCero(Dou As Double) As String


If Dou = 0 Then
DouATexCero = "0"
Else
DouATexCero = DouATex(Dou)
End If
End Function

Página 175
Public Function Redondear(Valor As Double, Optional KDec As Integer = 2,
Optional Forma As String = "B") As Double

' Redondear(Valor,KDec,Forma) --> dou


' Redondea el valor recibido a la cantidad de decimanles indicadas
' Forma puede ser
' A Redondea hacia arriba.
' B Redondeo Bancario
' C Trunca los decimales

Dim Dato1 As Double


Dim Dato2 As Double
Dato1 = Valor * 10 ^ KDec
Dato2 = Int(Dato1)
If Dato1 = Dato2 Then
Redondear = Valor
Exit Function
End If
Select Case Forma
Case "A"
Redondear = (Dato2 + 1) / 10 ^ KDec
Case "B"
If Dato1 - Dato2 >= 0.5 Then
Redondear = (Dato2 + 1) / 10 ^ KDec
Else
Redondear = Dato2 / 10 ^ KDec
End If
Case "C"
Redondear = Dato2 / 10 ^ KDec
End Select
End Function

' TexAInt(txt) --> Int


' Convierte un texto en un Tipo Integer. Si el texto es "" Coloca 0

Public Function TexAInt(Txt As String) As Currency


If Txt = "" Then
TexAInt = CInt("0")
Else
TexAInt = CInt(Txt)
End If
End Function

' TexALng(txt) --> Int


' Convierte un texto en un Tipo Long. Si el texto es "" Coloca 0

Public Function TexALng(ByVal Txt As String) As Long


If Txt = "" Then
TexALng = CLng("0")
Else
TexALng = CLng(Txt)
End If
End Function

'

Página 176
' IntATex(Ent) --> txt
' Convierte un Integer en un texto. Si el entero es 0 Coloca ""

Public Function IntATex(ByVal Ent As Integer) As String


If Ent = 0 Then
IntATex = ""
Else
IntATex = Format(Ent, "General Number")
End If
End Function

' IntATex(Ent) --> txt


' Convierte un Integer en un texto. Si el entero es 0 Coloca ""

Public Function IntATexCero(ByVal Ent As Integer) As String


If Ent = 0 Then
IntATexCero = "0"
Else
IntATexCero = Format(Ent, "General Number")
End If
End Function

' LngATex(Lng) --> txt


' Convierte un Entero Largo en un texto. Si el entero es 0 Coloca ""

Public Function LngATex(ByVal Ent As Long) As String


If Ent = 0 Then
LngATex = ""
Else
LngATex = Format(Ent, "General Number")
End If
End Function

' LngATexCero(Lng) --> txt


' Idem LngATex pero si es cero devuelve 0

Public Function LngATexCero(Lng As Long) As String


If Lng = 0 Then
LngATexCero = "0"
Else
LngATexCero = LngATex(Lng)
End If
End Function

Página 177
'devuelve el nro de la ultima posicion del caracter que le paso comenzando
'desde la derecha

Public Function RInstr1(ByVal s1 As String, ByVal s2 As String) As Long


Dim i As Long
Dim sTmp As String

RInstr1 = 0
For i = Len(s1) To 1 Step -1
sTmp = Mid$(s1, i, Len(s2))
If sTmp = s2 Then
RInstr1 = i
Exit For
End If
Next
End Function

Function reemplazarTexto(textoCompleto As String, textoBuscar As String,


textoReemplazar As String) As String
'permite reemplazar una cadena de texto dentro de otra.
Dim Resultado As String

Resultado = Replace(textoCompleto, textoBuscar, textoReemplazar, , ,


vbTextCompare)
reemplazarTexto = Resultado
End Function

'devuelve un numero escrito en letras

Public Function pasaraletras(xnumero) As String

Dim tt As Integer
Dim final As String
Dim lNumber As Long

tt = InStr(xnumero, ",") 'Devuelve un entero que especifica la posición inicial de la


primera aparición de una cadena dentro de otra.

final = Mid$(xnumero, tt + 1, Len(xnumero))


lNumber = CLng(Left$(xnumero, tt))
pasaraletras = "Son Pesos: " + NumberToText(lNumber, LangSpanish) + " con " +
CStr(final) + "/100 "
'pasaraletras = "Son Pesos: " + NumberToText(lNumber, LangSpanish) + " con " +
CStr(final) + "/100 "

End Function

Página 178
CODIGO

ABM DEL FORMULARIO

‘DECLARACION DE VARIABLES GENERAL/DECLARACIONES

Option Explicit
Dim sqlhorarios As ADODB.Recordset

Dim sql As String


Dim resp

'variables para campos de base


Dim vnromedico, vmedico, vespecialidad As String
Dim vlunes, vmartes, vmiercoles, vjueves, vviernes, vsabado, vdomingo As String
Dim vlunesinicio, vlunesfin, vmartesinicio, vmartesfin, vmiercolesinicio, vmiercolesfin
As String
Dim vjuevesinicio, vjuevesfin, vviernesinicio, vviernesfin, vsabadoinicio, vsabadofin,
vdomingoinicio, vdomingofin As String
Dim vobservaciones As String

Private Sub Form_Load()

'abrir conexion
modclinica.datosconeccion
datos.AbrirConeccion modclinica.coneccion, modclinica.dbconeccion,
modclinica.dbpath, modclinica.dbpass

'cargar imágenes de los botones


Cargas.ImagenBoton cmdagregar, "CRDFLE11.ico"
Cargas.ImagenBoton cmdmodificar, "note16.ico"
Cargas.ImagenBoton cmdborrar, "delete.ico"
Cargas.ImagenBoton cmdcancelar, "cancel1.ico"
Cargas.ImagenBoton cmdbuscar, "BINOCULR.ico"
Cargas.ImagenBoton cmdsalir01, "Salir1.ico"
Cargas.ImagenBoton cmdsalir02, "Salir1.ico"

End Sub

Página 179
* EVENTO CLICK DE CADA UNO DE LOS BOTONES

Private Sub cmdagregar_Click()


If ValidacionDatosFormulario() Then

cargavariables

‘ARMADO DE LA INSTRUCCIÓN INSERT SQL


sql = "INSERT INTO horarios (nromedico, medico, especialidad, "
If (txtlunesinicio.Text) <> "" Then
sql = sql + "lunes, lunesinicio, lunesfin, "
End If

If (txtmartesinicio.Text) <> "" Then


sql = sql + "martes, martesinicio, martesfin, "
End If

If (txtmiercolesinicio.Text) <> "" Then


sql = sql + "miercoles, miercolesinicio, miercolesfin, "
End If

If (txtjuevesinicio.Text) <> "" Then


sql = sql + "jueves, juevesinicio, juevesfin, "
End If

If (txtviernesinicio.Text) <> "" Then


sql = sql + "viernes, viernesinicio, viernesfin, "
End If

If (txtsabadoinicio.Text) <> "" Then


sql = sql + "sabado, sabadoinicio, sabadofin, "
End If

sql = sql + "observaciones) "


sql = sql + "VALUES ('" + txtnromedico + "'"
sql = sql + ", '" + vmedico + "'"
sql = sql + ", '" + vespecialidad + "'"

If (txtlunesinicio.Text) <> "" Then


sql = sql + "," + vlunes
sql = sql + ", format(#" + Conver.FechaATex(vlunesinicio) + " " +
Mid(Format(vlunesinicio, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vlunesinicio,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vlunesinicio, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"

sql = sql + ", format(#" + Conver.FechaATex(vlunesfin) + " " + Mid(Format(vlunesfin,


"HH:MM:SS"), 1, 2) + ":" + Mid(Format(vlunesfin, "HH:MM:SS"), 4, 2) + ":" +
Mid(Format(vlunesfin, "HH:MM:SS"), 7, 2) + "#, 'mm/dd/yyyy hh:mm:ss')"
End If

Página 180
If (txtmartesinicio.Text) <> "" Then
sql = sql + "," + vmartes
sql = sql + ", format(#" + Conver.FechaATex(vmartesinicio) + " " +
Mid(Format(vmartesinicio, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vmartesinicio,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vmartesinicio, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"

sql = sql + ", format(#" + Conver.FechaATex(vmartesfin) + " " +


Mid(Format(vmartesfin, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vmartesfin,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vmartesfin, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"
End If

If (txtmiercolesinicio.Text) <> "" Then


sql = sql + "," + vmiercoles
sql = sql + ", format(#" + Conver.FechaATex(vmiercolesinicio) + " " +
Mid(Format(vmiercolesinicio, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vmiercolesinicio,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vmiercolesinicio, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"
sql = sql + ", format(#" + Conver.FechaATex(vmiercolesfin) + " " +
Mid(Format(vmiercolesfin, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vmiercolesfin,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vmiercolesfin, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"

End If

If (txtjuevesinicio.Text) <> "" Then


sql = sql + "," + vjueves
sql = sql + ", format(#" + Conver.FechaATex(vjuevesinicio) + " " +
Mid(Format(vjuevesinicio, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vjuevesinicio,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vjuevesinicio, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"

sql = sql + ", format(#" + Conver.FechaATex(vjuevesfin) + " " +


Mid(Format(vjuevesfin, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vjuevesfin,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vjuevesfin, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"
End If

If (txtviernesinicio.Text) <> "" Then


sql = sql + "," + vviernes
sql = sql + ", format(#" + Conver.FechaATex(vviernesinicio) + " " +
Mid(Format(vviernesinicio, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vviernesinicio,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vviernesinicio, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"
sql = sql + ", format(#" + Conver.FechaATex(vviernesfin) + " " +
Mid(Format(vviernesfin, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vviernesfin,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vviernesfin, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"
End If

Página 181
If (txtsabadoinicio.Text) <> "" Then
sql = sql + "," + vsabado
sql = sql + ", format(#" + Conver.FechaATex(vsabadoinicio) + " " +
Mid(Format(vsabadoinicio, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vsabadoinicio,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vsabadoinicio, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"
sql = sql + ", format(#" + Conver.FechaATex(vsabadofin) + " " +
Mid(Format(vsabadofin, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vsabadofin,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vsabadofin, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"
End If
sql = sql + ", '" + vobservaciones + "'"
sql = sql + ")"

datos.realizarSQL sql, modclinica.coneccion

limpiar
cmdagregar.Enabled = False
cmdmodificar.Enabled = False
cmdcancelar.Enabled = False
txtnromedico.SetFocus
End If
End Sub

Private Sub cmdmodificar_Click()


If ValidacionDatosFormulario() Then

cargavariables

‘ARMADO DE LA INSTRUCCIÓN UPDATE EN SQL


sql = "UPDATE horarios SET horarios.nromedico = " + Str(vnromedico)
sql = sql + ", horarios.medico = '" + vmedico + "' "
sql = sql + ", horarios.especialidad = '" + vespecialidad + "' "

sql = sql + ", horarios.lunes = " + vlunes


If Trim(txtlunesinicio.Text) <> "" Then
sql = sql + ", horarios.lunesinicio = format(#" + Conver.FechaATex(vlunesinicio) + "
" + Mid(Format(vlunesinicio, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vlunesinicio,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vlunesinicio, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"
sql = sql + ", horarios.lunesfin = format(#" + Conver.FechaATex(vlunesfin) + " " +
Mid(Format(vlunesfin, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vlunesfin, "HH:MM:SS"),
4, 2) + ":" + Mid(Format(vlunesfin, "HH:MM:SS"), 7, 2) + "#, 'mm/dd/yyyy hh:mm:ss')"
Else
sql = sql + ", horarios.lunesinicio = null"
sql = sql + ", horarios.lunesfin = null"
End If

sql = sql + ", horarios.martes = " + vmartes


If Trim(txtmartesinicio.Text) <> "" Then
sql = sql + ", horarios.martesinicio = format(#" + Conver.FechaATex(vmartesinicio)
+ " " + Mid(Format(vmartesinicio, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vmartesinicio,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vmartesinicio, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"

Página 182
sql = sql + ", horarios.martesfin = format(#" + Conver.FechaATex(vmartesfin) + " "
+ Mid(Format(vmartesfin, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vmartesfin,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vmartesfin, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"
Else
sql = sql + ", horarios.martesinicio = null"
sql = sql + ", horarios.martesfin = null"
End If

sql = sql + ", horarios.miercoles = " + vmiercoles


If Trim(txtmiercolesinicio.Text) <> "" Then
sql = sql + ", horarios.miercolesinicio = format(#" +
Conver.FechaATex(vmiercolesinicio) + " " + Mid(Format(vmiercolesinicio,
"HH:MM:SS"), 1, 2) + ":" + Mid(Format(vmiercolesinicio, "HH:MM:SS"), 4, 2) + ":" +
Mid(Format(vmiercolesinicio, "HH:MM:SS"), 7, 2) + "#, 'mm/dd/yyyy hh:mm:ss')"
sql = sql + ", horarios.miercolesfin = format(#" + Conver.FechaATex(vmiercolesfin)
+ " " + Mid(Format(vmiercolesfin, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vmiercolesfin,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vmiercolesfin, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"
Else
sql = sql + ", horarios.miercolesinicio = null"
sql = sql + ", horarios.miercolesfin = null"
End If

sql = sql + ", horarios.jueves = " + vjueves

If Trim(txtjuevesinicio.Text) <> "" Then


sql = sql + ", horarios.juevesinicio = format(#" + Conver.FechaATex(vjuevesinicio)
+ " " + Mid(Format(vjuevesinicio, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vjuevesinicio,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vjuevesinicio, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"
sql = sql + ", horarios.juevesfin = format(#" + Conver.FechaATex(vjuevesfin) + " " +
Mid(Format(vjuevesfin, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vjuevesfin,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vjuevesfin, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"
Else
sql = sql + ", horarios.juevesinicio = null"
sql = sql + ", horarios.juevesfin = null"
End If

sql = sql + ", horarios.viernes = " + vviernes


If Trim(txtviernesinicio.Text) <> "" Then
sql = sql + ", horarios.viernesinicio = format(#" +
Conver.FechaATex(vviernesinicio) + " " + Mid(Format(vviernesinicio, "HH:MM:SS"), 1,
2) + ":" + Mid(Format(vviernesinicio, "HH:MM:SS"), 4, 2) + ":" +
Mid(Format(vviernesinicio, "HH:MM:SS"), 7, 2) + "#, 'mm/dd/yyyy hh:mm:ss')"
sql = sql + ", horarios.viernesfin = format(#" + Conver.FechaATex(vviernesfin) + "
" + Mid(Format(vviernesfin, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vviernesfin,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vviernesfin, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"
Else
sql = sql + ", horarios.viernesinicio = null"
sql = sql + ", horarios.viernesfin = null"
End If

Página 183
sql = sql + ", horarios.sabado = " + vsabado
If Trim(txtsabadoinicio.Text) <> "" Then
sql = sql + ", horarios.sabadoinicio = format(#" +
Conver.FechaATex(vsabadoinicio) + " " + Mid(Format(vsabadoinicio, "HH:MM:SS"), 1,
2) + ":" + Mid(Format(vsabadoinicio, "HH:MM:SS"), 4, 2) + ":" +
Mid(Format(vsabadoinicio, "HH:MM:SS"), 7, 2) + "#, 'mm/dd/yyyy hh:mm:ss')"
sql = sql + ", horarios.sabadofin = format(#" + Conver.FechaATex(vsabadofin) + "
" + Mid(Format(vsabadofin, "HH:MM:SS"), 1, 2) + ":" + Mid(Format(vsabadofin,
"HH:MM:SS"), 4, 2) + ":" + Mid(Format(vsabadofin, "HH:MM:SS"), 7, 2) + "#,
'mm/dd/yyyy hh:mm:ss')"
Else
sql = sql + ", horarios.sabadoinicio = null"
sql = sql + ", horarios.sabadofin = null"
End If

sql = sql + ", horarios.observaciones = '" + vobservaciones + "' "


sql = sql + " WHERE id = " + Str(txtid)

datos.realizarSQL sql, modclinica.coneccion


limpiar
cmdagregar.Enabled = False
cmdmodificar.Enabled = False
cmdborrar.Enabled = False
cmdcancelar.Enabled = False
txtnromedico.SetFocus

End If
End Sub

Private Sub cmdborrar_Click()


resp = MsgBox("esta seguro?", vbYesNo + vbQuestion, "cuidad se eliminara un
registro")
If (resp = vbYes) Then
'Elimina los items correspondientes a la tabla de horarios
On Error GoTo Solucion1
sql = "DELETE FROM horarios Where id = " + txtid
datos.realizarSQL sql, modclinica.coneccion
MsgBox "El registro fue eliminado", vbInformation, "Registro Eliminado "
limpiar
cmdcancelar.Enabled = False
cmdborrar.Enabled = False
Else
MsgBox "El registro no fue eliminado", vbInformation, "fue su decision ... "
cmdborrar.Enabled = True
cmdcancelar.Enabled = True
End If
cmdagregar.Enabled = False
cmdmodificar.Enabled = False
txtnromedico.SetFocus
Exit Sub

Solucion1:
MsgBox "error:" & Err & Chr$(13) & Err.Description, vbExclamation, "Existe un
problema"
End Sub

Página 184
Private Sub cmdcancelar_Click()
limpiar
cmdagregar.Enabled = False
cmdmodificar.Enabled = False
cmdborrar.Enabled = False
cmdcancelar.Enabled = False
txtnromedico.SetFocus
End Sub

'Permite seleccionar el medico deseado y traer sus horarios


Private Sub btselmedico_Click()
frmselmedicos.Show vbModal
txtnromedico = frmselmedicos.xnromedico
txtmedico = frmselmedicos.xmedico
txtespecialidad = frmselmedicos.xespecialidad
buscarhorariosmedicos
End Sub

Private Sub cmdsalir01_Click()


Unload Me
End Sub

* PROCEDIMIENTOS Y FUNCIONES

En el procedimiento de carga de variables se carga en la variable correspondiente al


día, por ejemplo, vlunes la palabra true como string para luego poder utilizarla en el
armado de la cadena de caracteres de la instrucción sql.
Ademas para las variables de inicio y fin, por ejemplo, vlunesinicio y vlunesfin,
convertimos el dato ingresado en el textbox que es tipo string a tipo fecha utilizando la
función texafecha existente en el modulo conver.bas.

Public Sub cargavariables()


‘Este procedimiento pasa los datos escritos en los textbox a variables

vnromedico = Trim(txtnromedico)
vmedico = Trim(txtmedico)
vespecialidad = Trim(txtespecialidad)

If chklunes.Value = 1 Then
vlunes = "True"
Else
vlunes = "False"
End If

vlunesinicio = TexAFecha(Trim(txtlunesinicio))
vlunesfin = TexAFecha(Trim(txtlunesfin))

If chkmartes.Value = 1 Then
vmartes = "True"
Else
vmartes = "False"
End If

vmartesinicio = TexAFecha(Trim(txtmartesinicio))
vmartesfin = TexAFecha(Trim(txtmartesfin))

Página 185
If chkmiercoles.Value = 1 Then
vmiercoles = "True"
Else
vmiercoles = "False"
End If

vmiercolesinicio = TexAFecha(Trim(txtmiercolesinicio))
vmiercolesfin = TexAFecha(Trim(txtmiercolesfin))

If chkjueves.Value = 1 Then
vjueves = "True"
Else
vjueves = "False"
End If

vjuevesinicio = TexAFecha(Trim(txtjuevesinicio))
vjuevesfin = TexAFecha(Trim(txtjuevesfin))

If chkviernes.Value = 1 Then
vviernes = "True"
Else
vviernes = "False"
End If

vviernesinicio = TexAFecha(Trim(txtviernesinicio))
vviernesfin = TexAFecha(Trim(txtviernesfin))

If chksabado.Value = 1 Then
vsabado = "True"
Else
vsabado = "False"
End If

vsabadoinicio = TexAFecha(Trim(txtsabadoinicio))
vsabadofin = TexAFecha(Trim(txtsabadofin))

vobservaciones = Trim(txtobservaciones)

End Sub

Página 186
‘Este procedimiento muestra los datos existentes en un registro a los textbox

Public Sub BaseAText(XTabla)

txtid = XTabla.Fields("id")

If IsNull(XTabla.Fields("nromedico")) Then
txtnromedico = ""
Else
txtnromedico = XTabla.Fields("nromedico")
End If

If IsNull(XTabla.Fields("medico")) Then
txtmedico = ""
Else
txtmedico = XTabla.Fields("medico")
End If

If IsNull(XTabla.Fields("especialidad")) Then
txtespecialidad = ""
Else
txtespecialidad = XTabla.Fields("especialidad")
End If

If XTabla.Fields("lunes") = True Then


chklunes.Value = 1
Else
chklunes.Value = 0
End If

If IsNull(XTabla.Fields("lunesinicio")) Then
txtlunesinicio = ""
Else
txtlunesinicio = Trim(XTabla.Fields("lunesinicio"))
End If

If IsNull(XTabla.Fields("lunesfin")) Then
txtlunesfin = ""
Else
txtlunesfin = Trim(XTabla.Fields("lunesfin"))
End If

If XTabla.Fields("martes") = True Then


chkmartes.Value = 1
Else
chkmartes.Value = 0
End If

If IsNull(XTabla.Fields("martesinicio")) Then
txtmartesinicio = ""
Else
txtmartesinicio = Trim(XTabla.Fields("martesinicio"))
End If

Página 187
If IsNull(XTabla.Fields("martesfin")) Then
txtmartesfin = ""
Else
txtmartesfin = Trim(XTabla.Fields("martesfin"))
End If

If XTabla.Fields("miercoles") = True Then


chkmiercoles.Value = 1
Else
chkmiercoles.Value = 0
End If

If IsNull(XTabla.Fields("miercolesinicio")) Then
txtmiercolesinicio = ""
Else
txtmiercolesinicio = Trim(XTabla.Fields("miercolesinicio"))
End If

If IsNull(XTabla.Fields("miercolesfin")) Then
txtmiercolesfin = ""
Else
txtmiercolesfin = Trim(XTabla.Fields("miercolesfin"))
End If

If XTabla.Fields("jueves") = True Then


chkjueves.Value = 1
Else
chkjueves.Value = 0
End If

If IsNull(XTabla.Fields("juevesinicio")) Then
txtjuevesinicio = ""
Else
txtjuevesinicio = Trim(XTabla.Fields("juevesinicio"))
End If

If IsNull(XTabla.Fields("juevesfin")) Then
txtjuevesfin = ""
Else
txtjuevesfin = Trim(XTabla.Fields("juevesfin"))
End If

If XTabla.Fields("viernes") = True Then


chkviernes.Value = 1
Else
chkviernes.Value = 0
End If

If IsNull(XTabla.Fields("viernesinicio")) Then
txtviernesinicio = ""
Else
txtviernesinicio = Trim(XTabla.Fields("viernesinicio"))
End If

Página 188
If IsNull(XTabla.Fields("viernesfin")) Then
txtviernesfin = ""
Else
txtviernesfin = Trim(XTabla.Fields("viernesfin"))
End If

If XTabla.Fields("sabado") = True Then


chksabado.Value = 1
Else
chksabado.Value = 0
End If

If IsNull(XTabla.Fields("sabadoinicio")) Then
txtsabadoinicio = ""
Else
txtsabadoinicio = Trim(XTabla.Fields("sabadoinicio"))
End If

If IsNull(XTabla.Fields("sabadofin")) Then
txtsabadofin = ""
Else
txtsabadofin = Trim(XTabla.Fields("sabadofin"))
End If

If IsNull(XTabla.Fields("observaciones")) Then
txtobservaciones = ""
Else
txtobservaciones = XTabla.Fields("observaciones")
End If

End Sub

‘Este procedimiento limpia toda la pantalla dejando los textbox en blanco y las casillas
desmarcadas… no elimina registros

Public Sub limpiar()

txtid = ""

txtnromedico = ""
txtmedico = ""
txtespecialidad = ""

chklunes.Value = 0
txtlunesinicio = ""
txtlunesfin = ""

chkmartes.Value = 0
txtmartesinicio = ""
txtmartesfin = ""

chkmiercoles.Value = 0
txtmiercolesinicio = ""
txtmiercolesfin = ""

Página 189
chkjueves.Value = 0
txtjuevesinicio = ""
txtjuevesfin = ""

chkviernes.Value = 0
txtviernesinicio = ""
txtviernesfin = ""

chksabado.Value = 0
txtsabadoinicio = ""
txtsabadofin = ""

txtobservaciones = ""
MSFlexhorarios.Clear
TituloGrilla
txtbuscar = ""

End Sub

‘ Esta función verifica si la carga de cada uno de los datos es correcta y devuelve valor
verdadero o falso de acuerdo a si los datos son o no correctos

Private Function ValidacionDatosFormulario() As Boolean


ValidacionDatosFormulario = False

If Trim(txtmedico) = "" Then


resp = MsgBox("Debe Ingresar el medico ", vbCritical, " Medico ")
txtmedico.SetFocus
Exit Function
End If

If Trim(txtespecialidad) = "" Then


resp = MsgBox("Debe Ingresar la especialidad del medico", vbCritical, "
Especialidad ")
txtespecialidad.SetFocus
Exit Function
End If

If chklunes.Value = 0 Then
If Not (Trim(txtlunesinicio.Text) = "" And Trim(txtlunesfin.Text) = "") Then
resp = MsgBox("Si ingresa un horario lunes debe marcar el dia ", vbCritical, "
Horarios ")
txtlunesinicio.SetFocus
Exit Function
End If

ElseIf chklunes.Value = 1 Then

If Not (Trim(txtlunesinicio.Text) <> "" And Trim(txtlunesfin.Text) <> "") Then


resp = MsgBox("Ingreso el horario y no marco el dia ", vbCritical, " Horarios ")
txtlunesinicio.SetFocus
Exit Function
End If

End If

Página 190
If chkmartes.Value = 0 Then
If Not (Trim(txtmartesinicio.Text) = "" And Trim(txtmartesfin.Text) = "") Then
resp = MsgBox("Si ingresa un horario martes debe marcar el dia ", vbCritical, "
Horarios ")
txtmartesinicio.SetFocus
Exit Function
End If

ElseIf chkmartes.Value = 1 Then

If Not (Trim(txtmartesinicio.Text) <> "" And Trim(txtmartesfin.Text) <> "") Then


resp = MsgBox("Ingreso el horario y no marco el dia ", vbCritical, " Horarios ")
txtmartesinicio.SetFocus
Exit Function
End If

End If

If chkmiercoles.Value = 0 Then
If Not (Trim(txtmiercolesinicio.Text) = "" And Trim(txtmiercolesfin.Text) = "") Then
resp = MsgBox("Si ingresa un horario miercoles debe marcar el dia ", vbCritical, "
Horarios ")
txtmiercolesinicio.SetFocus
Exit Function
End If

ElseIf chkmiercoles.Value = 1 Then

If Not (Trim(txtmiercolesinicio.Text) <> "" And Trim(txtmiercolesfin.Text) <> "") Then


resp = MsgBox("Ingreso el horario y no marco el dia ", vbCritical, " Horarios ")
txtmiercolesinicio.SetFocus
Exit Function
End If

End If

If chkjueves.Value = 0 Then
If Not (Trim(txtjuevesinicio.Text) = "" And Trim(txtjuevesfin.Text) = "") Then
resp = MsgBox("Si ingresa un horario jueves debe marcar el dia ", vbCritical, "
Horarios ")
txtjuevesinicio.SetFocus
Exit Function
End If

ElseIf chkjueves.Value = 1 Then

If Not (Trim(txtjuevesinicio.Text) <> "" And Trim(txtjuevesfin.Text) <> "") Then


resp = MsgBox("Ingreso el horario y no marco el dia ", vbCritical, " Horarios ")
txtjuevesinicio.SetFocus
Exit Function
End If

End If

Página 191
If chkviernes.Value = 0 Then
If Not (Trim(txtviernesinicio.Text) = "" And Trim(txtviernesfin.Text) = "") Then
resp = MsgBox("Si ingresa un horario viernes debe marcar el dia ", vbCritical, "
Horarios ")
txtviernesinicio.SetFocus
Exit Function
End If

ElseIf chkviernes.Value = 1 Then

If Not (Trim(txtviernesinicio.Text) <> "" And Trim(txtviernesfin.Text) <> "") Then


resp = MsgBox("Ingreso el horario y no marco el dia ", vbCritical, " Horarios ")
txtviernesinicio.SetFocus
Exit Function
End If

End If

If chksabado.Value = 0 Then
If Not (Trim(txtsabadoinicio.Text) = "" And Trim(txtsabadofin.Text) = "") Then
resp = MsgBox("Si ingresa un horario sabado debe marcar el dia ", vbCritical, "
Horarios ")
txtsabadoinicio.SetFocus
Exit Function
End If

ElseIf chksabado.Value = 1 Then

If Not (Trim(txtsabadoinicio.Text) <> "" And Trim(txtsabadofin.Text) <> "") Then


resp = MsgBox("Ingreso el horario y no marco el dia ", vbCritical, " Horarios ")
txtsabadoinicio.SetFocus
Exit Function
End If

End If

If Trim(txtlunesinicio) <> "" Then


If Not (validarfecha(txtlunesinicio)) Then Exit Function
If Not (validarfecha(txtlunesfin)) Then Exit Function

End If

If Trim(txtmartesinicio) <> "" Then


If Not (validarfecha(txtmartesinicio)) Then Exit Function
If Not (validarfecha(txtmartesfin)) Then Exit Function
End If

If Trim(txtmiercolesinicio) <> "" Then


If Not (validarfecha(txtmiercolesinicio)) Then Exit Function
If Not (validarfecha(txtmiercolesfin)) Then Exit Function
End If

Página 192
If Trim(txtjuevesinicio) <> "" Then
If Not (validarfecha(txtjuevesinicio)) Then Exit Function
If Not (validarfecha(txtjuevesfin)) Then Exit Function
End If

If Trim(txtviernesinicio) <> "" Then


If Not (validarfecha(txtviernesinicio)) Then Exit Function
If Not (validarfecha(txtviernesfin)) Then Exit Function
End If

If Trim(txtsabadoinicio) <> "" Then


If Not (validarfecha(txtsabadoinicio)) Then Exit Function
If Not (validarfecha(txtsabadofin)) Then Exit Function
End If

If Len(Trim(txtobservaciones)) > 255 Then


resp = MsgBox("Solo puede ingresar hasta 255 caracteres", vbCritical, "
Observaciones ")
txtobservaciones.SetFocus
Exit Function
End If

ValidacionDatosFormulario = True
End Function

‘ Esta función verifica si es correcto el formato de las fechas ingresadas y de las horas.
Respecto a las horas utiliza la función mid para tomar la ubicación de los dos puntos
“:” que se deben ingresar para separar horas y minutos, ademas de la función len para
verificar que la longitud total de la hora sea la correcta.

Function validarfecha(xfecha As TextBox) As Boolean

validarfecha = False

If Trim(xfecha) = "" Then


resp = MsgBox("Debe Ingresar una hora valida", vbCritical, " Horario ")
xfecha.SetFocus
Exit Function
End If

If Mid(Trim(xfecha), 3, 1) <> ":" Then


resp = MsgBox("Debe Ingresar una hora valida", vbCritical, " Horario ")
xfecha.SetFocus
Exit Function
End If

If Mid(Trim(xfecha), 6, 1) <> ":" Then


resp = MsgBox("Debe Ingresar una hora valida", vbCritical, " Horario ")
xfecha.SetFocus
Exit Function
End If

Página 193
If Len(Trim(xfecha)) <> 8 Then
If Len(Trim(xfecha)) <> 13 Then
resp = MsgBox("Debe Ingresar una hora valida", vbCritical, " Horario ")
xfecha.SetFocus
Exit Function
End If
End If
validarfecha = True

End Function

‘ Este procedimiento busca si los horarios del médico solicitado han sido ingresados o
no y de acuerdo a esto habilita el alta o muestra los datos para su posible modificación
o eliminación

Private Sub buscarhorariosmedicos()

Dim mensaje As String


If Trim(txtnromedico.Text) <> "" Then
'Apertura y cierre de recordset para instruccion SQL
If IsNumeric(txtnromedico.Text) Then
sql = "SELECT * FROM horarios WHERE nromedico = " + txtnromedico
datos.AbrirRecordsetSQL sqlhorarios, sql, modclinica.coneccion
If sqlhorarios.EOF And sqlhorarios.BOF Then
cmdagregar.Enabled = True
cmdmodificar.Enabled = False
cmdborrar.Enabled = False
cmdcancelar.Enabled = True
Else
cmdagregar.Enabled = False
cmdmodificar.Enabled = True
cmdborrar.Enabled = True
cmdcancelar.Enabled = True
BaseAText sqlhorarios
End If
datos.CerrarTabla sqlhorarios
Else
mensaje = MsgBox("Debe Ingresar un Dato Numérico", vbOKOnly +
vbInformation, "Error")
End If
Else
sql = "SELECT MAX(val(nromedico)) as maximo FROM horarios"
datos.AbrirRecordsetSQL sqlhorarios, sql, modclinica.coneccion
If IsNull(sqlhorarios.Fields("maximo")) Then
txtnromedico = 1
Else
txtnromedico = sqlhorarios.Fields("maximo") + 1
End If
cmdagregar.Enabled = True
cmdmodificar.Enabled = False
cmdborrar.Enabled = False
cmdcancelar.Enabled = True
datos.CerrarTabla sqlhorarios
End If
End Sub

Página 194
* EVENTO LOSTFOCUS DE TXTNROMEDICO (TEXTBOX DONDE SE INGRESA EL
NUMERO DE MEDICO

Private Sub txtnromedico_LostFocus()


buscarhorariosmedicos
End Sub

* EVENTO KEYPRESS DE CADA UNO DE LOS TEXTBOX

Private Sub txtnromedico_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then 'And Trim(txtnromedico.Text) <> "" Then


txtmedico.SetFocus
End If

End Sub

Private Sub txtmedico_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
txtespecialidad.SetFocus
End If

End Sub

Private Sub txtespecialidad_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then
txtlunesinicio.SetFocus
End If
End Sub

Private Sub txtlunesinicio_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then
txtlunesfin.SetFocus
End If
End Sub

Private Sub txtlunesfin_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then
txtmartesinicio.SetFocus
End If
End Sub

Private Sub txtmartesinicio_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then
txtmartesfin.SetFocus
End If
End Sub

Private Sub txtmartesfin_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then
txtmiercolesinicio.SetFocus
End If
End Sub

Página 195
Private Sub txtmiercolesinicio_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
txtmiercolesfin.SetFocus
End If
End Sub

Private Sub txtmiercolesfin_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then
txtjuevesinicio.SetFocus
End If
End Sub

Private Sub txtjuevesinicio_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then
txtjuevesfin.SetFocus
End If
End Sub

Private Sub txtjuevesfin_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then
txtviernesinicio.SetFocus
End If
End Sub

Private Sub txtviernesinicio_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then
txtviernesfin.SetFocus
End If
End Sub

Private Sub txtviernesfin_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then
txtsabadoinicio.SetFocus
End If
End Sub

Private Sub txtsabadoinicio_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then
txtsabadofin.SetFocus
End If
End Sub

Private Sub txtsabadofin_KeyPress(KeyAscii As Integer)


If KeyAscii = 13 Then
txtobservaciones.SetFocus
End If
End Sub

Página 196
Private Sub txtobservaciones_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
If cmdagregar.Enabled = True Then
cmdagregar.SetFocus
ElseIf cmdmodificar.Enabled = True Then
cmdmodificar.SetFocus
Else
txtnromedico.SetFocus
End If
End If
End Sub

EVENTO CLICK DE LAS PESTAÑAS


'Evento click del sstab

Private Sub sstabhorarios_Click(PreviousTab As Integer)

If sstabhorarios.Tab = 0 Then
frmbotonera.Visible = True
ElseIf sstabhorarios.Tab = 1 Then
frmbotonera.Visible = False
cargarbusqueda

End If

End Sub

PESTAÑA DE BUSQUEDA
'Ficha de busqueda

Private Sub txtbuscar_Change()


cargarbusqueda
End Sub

Private Sub opnromedico_Click()


txtbuscar.Text = ""
cargarbusqueda
End Sub

Private Sub opmedico_Click()


txtbuscar.Text = ""
cargarbusqueda
End Sub

Private Sub cmdbuscar_Click()


cargarbusqueda
End Sub

Página 197
Private Sub MSFlexhorarios_Click()
MSFlexhorarios.col = 1
txtid = MSFlexhorarios.Text

If Trim(txtnromedico = "") Then


limpiar
Else
sql = "SELECT * FROM horarios WHERE id = " + txtid
datos.AbrirRecordsetSQL sqlhorarios, sql, modclinica.coneccion
BaseAText sqlhorarios
datos.CerrarTabla sqlhorarios
End If

sstabhorarios.Tab = 0
cmdagregar.Enabled = False
cmdmodificar.Enabled = True
cmdborrar.Enabled = True
cmdcancelar.Enabled = True

End Sub

Private Sub cmdsalir02_Click()


Unload Me
End Sub

Private Sub Form_Unload(Cancel As Integer)


datos.CerrarConeccion modclinica.coneccion
End Sub

* PROCEDIMIENTOS

Public Sub cargarbusqueda()

sql = "SELECT id, nromedico, medico, lunesinicio, lunesfin, martesinicio, martesfin,


miercolesinicio, miercolesfin, "
sql = sql + "juevesinicio, juevesfin, viernesinicio, viernesfin, sabadoinicio, sabadofin "
sql = sql + " FROM horarios"

If opnromedico.Value Then
If Trim(txtbuscar) = "" Then
sql = sql + " WHERE TRUE"
Else
sql = sql + " WHERE [nromedico] = " + Trim(txtbuscar.Text)
End If
End If

If opmedico.Value Then
If Trim(txtbuscar) = "" Then
sql = sql + " WHERE true"
Else
sql = sql + " WHERE [medico] LIKE '" + Trim(txtbuscar.Text) + "%'"
End If
End If

Página 198
If opnromedico Then
sql = sql + " ORDER BY nromedico"
End If

If opmedico Then
sql = sql + " ORDER BY medico"
End If

If opnromedico And Trim(txtbuscar) <> "" And Not IsNumeric(txtbuscar) Then


MsgBox ("Error")
Exit Sub
Else
datos.AbrirRecordsetSQL sqlhorarios, sql, modclinica.coneccion
MSFlexhorarios.Clear
TituloGrilla
Cargas.CargarGrilla MSFlexhorarios, sqlhorarios
datos.CerrarTabla sqlhorarios
End If

End Sub

Public Sub TituloGrilla()

Dim cont As Byte

MSFlexhorarios.ColWidth(0) = 0
MSFlexhorarios.ColWidth(1) = 0 'id
MSFlexhorarios.ColWidth(2) = 900 'nromedico
MSFlexhorarios.ColWidth(3) = 2000 'medico

MSFlexhorarios.ColWidth(4) = 1200 'lunesinicio


MSFlexhorarios.ColWidth(5) = 1200 'lunesfin

MSFlexhorarios.ColWidth(6) = 1200 'martesinicio


MSFlexhorarios.ColWidth(7) = 1200 'martesfin

MSFlexhorarios.ColWidth(8) = 1200 'miercolesinicio


MSFlexhorarios.ColWidth(9) = 1200 'miercolesfin

MSFlexhorarios.ColWidth(10) = 1200 'juevesinicio


MSFlexhorarios.ColWidth(11) = 1200 'juevesfin

MSFlexhorarios.ColWidth(12) = 1200 'viernesinicio


MSFlexhorarios.ColWidth(13) = 1200 'viernesfin

MSFlexhorarios.ColWidth(14) = 1200 'sabadoinicio


MSFlexhorarios.ColWidth(15) = 1200 'sabadoinicio

MSFlexhorarios.Row = 0

Página 199
For cont = 1 To 15

MSFlexhorarios.col = cont
Select Case cont
Case 2: MSFlexhorarios.Text = "nromedico"
Case 3: MSFlexhorarios.Text = "medico"
Case 4: MSFlexhorarios.Text = "lunes"
Case 5: MSFlexhorarios.Text = ""
Case 6: MSFlexhorarios.Text = "martes"
Case 7: MSFlexhorarios.Text = ""
Case 8: MSFlexhorarios.Text = "miercoles"
Case 9: MSFlexhorarios.Text = ""
Case 10: MSFlexhorarios.Text = "jueves"
Case 11: MSFlexhorarios.Text = ""
Case 12: MSFlexhorarios.Text = "viernes"
Case 13: MSFlexhorarios.Text = ""
Case 14: MSFlexhorarios.Text = "sabado"
Case 15: MSFlexhorarios.Text = ""
End Select
Next

End Sub

Página 200
ALTA DE TURNOS MEDICOS - PROCESO AUTOMATICO DE ALTA DE TURNOS !!

Una vez ingresados los horarios de atención de cada médico debemos completar la
tabla de turnos. Para esto se debe crear un registro por cada una de las visitas en
cada dia y horario de atención.
Por ejemplo: si el profesional atiende el dia 22/07 de 10 a 11 y la visita de cada
paciente es de 15 minutos deberian ingresarse los siguientes registros en la tabla de
turnos:

22/07 10:00 SFORZINI LUIS TRAUMATOLOGIA


22/07 10:15 SFORZINI LUIS TRAUMATOLOGIA
22/07 10:30 SFORZINI LUIS TRAUMATOLOGIA
22/07 10:45 SFORZINI LUIS TRAUMATOLOGIA
22/07 11:00 SFORZINI LUIS TRAUMATOLOGIA

Esto básicamente habilita la agenda donde vamos a ir ingresando los datos de los
pacientes a los que les vamos a dar turno en cada horario.
La cantidad de registros a dar de alta es extremadamente extensa si por ejemplo
queremos habilitar la agenda aunque sea para 1 solo mes y por esto es imprescindible
crear esta pantalla que permita un proceso automático para la creación de la agenda
de turnos.

A continuación se muestra como modelo la carga de la agenda de 3 meses de 1 solo


médico.

id fecha nromedico medico especialidad


19425 22/07/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19426 22/07/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19427 22/07/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19428 22/07/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19429 22/07/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19430 26/07/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19431 26/07/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19432 26/07/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19433 26/07/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19434 27/07/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19435 27/07/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19436 27/07/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19437 27/07/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19438 29/07/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19439 29/07/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19440 29/07/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19441 29/07/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19442 29/07/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19443 02/08/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19444 02/08/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19445 02/08/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19446 02/08/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19447 03/08/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19448 03/08/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19449 03/08/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA

Página 201
id fecha nromedico medico especialidad
19450 03/08/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19451 05/08/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19452 05/08/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19453 05/08/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19454 05/08/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19455 05/08/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19456 09/08/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19457 09/08/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19458 09/08/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19459 09/08/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19460 10/08/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19461 10/08/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19462 10/08/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19463 10/08/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19464 12/08/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19465 12/08/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19466 12/08/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19467 12/08/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19468 12/08/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19469 16/08/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19470 16/08/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19471 16/08/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19472 16/08/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19473 17/08/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19474 17/08/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19475 17/08/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19476 17/08/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19477 19/08/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19478 19/08/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19479 19/08/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19480 19/08/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19481 19/08/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19482 23/08/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19483 23/08/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19484 23/08/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19485 23/08/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19486 24/08/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19487 24/08/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19488 24/08/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19489 24/08/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19490 26/08/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19491 26/08/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19492 26/08/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19493 26/08/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19494 26/08/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19495 30/08/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19496 30/08/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA

Página 202
id fecha nromedico medico especialidad
19497 30/08/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19498 30/08/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19499 31/08/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19500 31/08/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19501 31/08/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19502 31/08/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19503 02/09/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19504 02/09/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19505 02/09/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19506 02/09/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19507 02/09/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19508 06/09/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19509 06/09/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19510 06/09/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19511 06/09/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19512 07/09/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19513 07/09/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19514 07/09/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19515 07/09/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19516 09/09/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19517 09/09/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19518 09/09/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19519 09/09/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19520 09/09/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19521 13/09/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19522 13/09/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19523 13/09/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19524 13/09/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19525 14/09/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19526 14/09/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19527 14/09/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19528 14/09/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19529 16/09/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19530 16/09/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19531 16/09/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19532 16/09/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19533 16/09/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19534 20/09/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19535 20/09/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19536 20/09/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19537 20/09/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19538 21/09/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19539 21/09/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19540 21/09/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19541 21/09/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19542 23/09/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19543 23/09/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA

Página 203
id fecha nromedico medico especialidad
19544 23/09/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19545 23/09/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19546 23/09/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19547 27/09/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19548 27/09/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19549 27/09/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19550 27/09/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19551 28/09/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19552 28/09/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19553 28/09/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19554 28/09/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19555 30/09/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19556 30/09/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19557 30/09/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19558 30/09/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19559 30/09/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19560 04/10/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19561 04/10/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19562 04/10/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19563 04/10/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19564 05/10/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19565 05/10/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19566 05/10/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19567 05/10/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19568 07/10/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19569 07/10/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19570 07/10/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19571 07/10/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19572 07/10/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19573 11/10/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19574 11/10/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19575 11/10/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19576 11/10/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19577 12/10/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19578 12/10/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19579 12/10/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19580 12/10/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19581 14/10/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19582 14/10/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19583 14/10/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19584 14/10/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19585 14/10/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19586 18/10/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19587 18/10/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19588 18/10/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19589 18/10/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19590 19/10/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA

Página 204
id fecha nromedico medico especialidad
19591 19/10/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19592 19/10/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19593 19/10/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19594 21/10/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19595 21/10/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19596 21/10/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19597 21/10/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19598 21/10/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19599 25/10/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19600 25/10/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19601 25/10/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19602 25/10/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19603 26/10/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19604 26/10/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19605 26/10/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19606 26/10/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19607 28/10/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19608 28/10/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19609 28/10/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19610 28/10/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19611 28/10/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19612 01/11/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19613 01/11/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19614 01/11/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19615 01/11/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19616 02/11/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19617 02/11/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19618 02/11/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19619 02/11/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19620 04/11/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19621 04/11/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19622 04/11/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19623 04/11/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19624 04/11/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19625 08/11/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19626 08/11/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19627 08/11/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19628 08/11/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19629 09/11/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19630 09/11/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19631 09/11/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19632 09/11/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19633 11/11/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19634 11/11/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19635 11/11/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19636 11/11/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19637 11/11/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA

Página 205
id fecha nromedico medico especialidad
19638 15/11/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19639 15/11/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19640 15/11/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19641 15/11/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19642 16/11/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19643 16/11/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19644 16/11/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19645 16/11/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19646 18/11/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19647 18/11/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19648 18/11/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19649 18/11/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19650 18/11/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19651 22/11/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19652 22/11/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19653 22/11/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19654 22/11/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19655 23/11/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19656 23/11/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19657 23/11/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19658 23/11/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19659 25/11/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19660 25/11/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19661 25/11/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19662 25/11/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19663 25/11/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19664 29/11/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19665 29/11/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19666 29/11/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19667 29/11/2010 11:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19668 30/11/2010 09:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19669 30/11/2010 09:45:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19670 30/11/2010 10:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19671 30/11/2010 10:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA

Luego de esta observación suponemos que entendemos con claridad la necesidad del
proceso automatico de esta carga y pasamos a mostrar el código.

Página 206
‘DECLARACION DE VARIABLES GENERAL/DECLARACIONES

Option Explicit
Dim mensaje
Dim sql As String
Dim vbtneliminar As Boolean

Dim sqlmedicos As ADODB.Recordset


Dim sqlhorarios As ADODB.Recordset
Dim sqlturnos As ADODB.Recordset

Dim vnromedico As Long


Dim vmedico As String
Dim vespecialidad As String

Dim vlunes As Boolean


Dim vhoradesdelunes As Date
Dim vhorahastalunes As Date

Dim vmartes As Boolean


Dim vhoradesdemartes As Date
Dim vhorahastamartes As Date

Dim vmiercoles As Boolean


Dim vhoradesdemiercoles As Date
Dim vhorahastamiercoles As Date

Dim vjueves As Boolean


Dim vhoradesdejueves As Date
Dim vhorahastajueves As Date

Dim vviernes As Boolean


Dim vhoradesdeviernes As Date
Dim vhorahastaviernes As Date

Dim vsabado As Boolean


Dim vhoradesdesabado As Date
Dim vhorahastasabado As Date

Dim vdomingo As Boolean


Dim vhoradesdedomingo As Date
Dim vhorahastadomingo As Date

Dim vfechadesde As Date


Dim vfechahasta As Date
Dim vfechaingresada As Date

Dim vhoradesde As Date


Dim vhorahasta As Date
Dim vhoraingresada As Date

Página 207
Private Sub Form_Load()
modclinica.datosconeccion
datos.AbrirConeccion modclinica.coneccion, modclinica.dbconeccion,
modclinica.dbpath, modclinica.dbpass

vbtneliminar = False

End Sub

* EVENTO CLICK DE LOS BOTONES DE COMANDO

‘Este es el boton que contiene el código específico de la carga automática de


turnos de atención del médico

Private Sub cmdcargar_Click()

vbtneliminar = False

sql = "SELECT * FROM turnos WHERE "


sql = sql + "nromedico = " + Str(txtnromedico)
sql = sql + " AND turnos.fecha >= format(#" + txtfechadesde + "#, 'mm/dd/yyyy') "
sql = sql + "AND turnos.fecha <= format(#" + txtfechahasta + "#, 'mm/dd/yyyy') "

datos.AbrirRecordsetSQL sqlturnos, sql, modclinica.coneccion

If Not (sqlturnos.BOF And sqlturnos.EOF) Then


mensaje = MsgBox("Ya hay cargadas fechas para este periodo", vbCritical,
"IMPOSIBLE INTENTE OTRO PERIODO")
Exit Sub
End If

If ValidacionDatosFormulario() Then

'LEE LOS HORARIOS DEL MEDICO

sql = "SELECT * FROM horarios WHERE nromedico = " + Str(txtnromedico)

datos.AbrirRecordsetSQL sqlhorarios, sql, coneccion

vnromedico = sqlhorarios.Fields("nromedico")
vmedico = sqlhorarios.Fields("medico")
vespecialidad = sqlhorarios.Fields("especialidad")

If sqlhorarios.Fields("lunes") = True Then


vlunes = sqlhorarios.Fields("lunes")
vhoradesdelunes = sqlhorarios.Fields("lunesinicio")
vhorahastalunes = sqlhorarios.Fields("lunesfin")
End If

If sqlhorarios.Fields("martes") = True Then


vmartes = sqlhorarios.Fields("martes")
vhoradesdemartes = sqlhorarios.Fields("martesinicio")
vhorahastamartes = sqlhorarios.Fields("martesfin")
End If

Página 208
If sqlhorarios.Fields("miercoles") = True Then
vmiercoles = sqlhorarios.Fields("miercoles")
vhoradesdemiercoles = sqlhorarios.Fields("miercolesinicio")
vhorahastamiercoles = sqlhorarios.Fields("miercolesfin")
End If

If sqlhorarios.Fields("jueves") = True Then


vjueves = sqlhorarios.Fields("jueves")
vhoradesdejueves = sqlhorarios.Fields("juevesinicio")
vhorahastajueves = sqlhorarios.Fields("juevesfin")
End If

If sqlhorarios.Fields("viernes") = True Then


vviernes = sqlhorarios.Fields("viernes")
vhoradesdeviernes = sqlhorarios.Fields("viernesinicio")
vhorahastaviernes = sqlhorarios.Fields("viernesfin")
End If

If sqlhorarios.Fields("sabado") = True Then


vsabado = sqlhorarios.Fields("sabado")
vhoradesdesabado = sqlhorarios.Fields("sabadoinicio")
vhorahastasabado = sqlhorarios.Fields("sabadofin")
End If

If sqlhorarios.Fields("domingo") = True Then


vdomingo = sqlhorarios.Fields("domingo")
vhoradesdedomingo = sqlhorarios.Fields("domingoinicio")
vhorahastadomingo = sqlhorarios.Fields("domingofin")
End If

datos.CerrarTabla sqlhorarios

'TOMA DE LOS TEXTBOX EL PERIODO A DAR DE ALTA (FECHA DESDE /


FECHA HASTA – EJEMPLO: 01/07 AL 31/07)

Dim vhora, vminutos, vsegundos As String

vfechadesde = txtfechadesde 'TOMAR DE LOS TEXTBOX


vfechahasta = txtfechahasta

‘INICIALIZA LA FECHA INGRESADA PARA COMENZAR CON EL WHILE Y LAS


ALTAS AUTOMATICAS DE CADA DIA DE ATENCION

vfechaingresada = vfechadesde

While vfechahasta > vfechaingresada while para la carga masiva de datos

Select Case Weekday(vfechaingresada)


Case 1
If vdomingo = True Then
cargaraltas vhoradesdedomingo, vhorahastadomingo
End If

Página 209
Case 2
If vlunes = True Then
cargaraltas vhoradesdelunes, vhorahastalunes
End If

Case 3
If vmartes = True Then
cargaraltas vhoradesdemartes, vhorahastamartes
End If

Case 4
If vmiercoles = True Then
cargaraltas vhoradesdemiercoles, vhorahastamiercoles
End If

Case 5
If vjueves = True Then
cargaraltas vhoradesdejueves, vhorahastajueves
End If

Case 6
If vviernes = True Then
cargaraltas vhoradesdeviernes, vhorahastaviernes
End If

Case 7
If vsabado = True Then
cargaraltas vhoradesdesabado, vhorahastasabado
End If

End Select

vfechaingresada = vfechaingresada + 1

Wend

limpiarvariables
MsgBox "Alta Procesada Correctamente"
limpiar

End If

End Sub

Página 210
‘Este es el boton que contiene el código que permite revertir el proceso de carga
automatica anterior. En caso de existir un error en la habilitación de dias y horarios a
dar turnos puedo eliminarlos utilizando este botón

Private Sub cmdeliminarfechas_Click()

vbtneliminar = True

If ValidacionDatosFormulario() Then

sql = "SELECT * FROM turnos WHERE "


sql = sql + "nromedico = " + Str(txtnromedico)
sql = sql + " AND turnos.fecha >= format(#" + txtfechadesde + "#, 'mm/dd/yyyy') "
sql = sql + "AND turnos.fecha <= format(#" + txtfechahasta + "#, 'mm/dd/yyyy') "
sql = sql + "AND paciente IS NOT NULL AND paciente <> ''"

datos.AbrirRecordsetSQL sqlturnos, sql, modclinica.coneccion


If sqlturnos.EOF And sqlturnos.BOF Then

sql = "DELETE FROM turnos Where "


sql = sql + "nromedico = " + Str(txtnromedico)
sql = sql + "AND turnos.fecha >= format(#" + txtfechadesde + "#, 'mm/dd/yyyy') "
sql = sql + "AND turnos.fecha <= format(#" + txtfechahasta + "#, 'mm/dd/yyyy')"

datos.realizarSQL sql, modclinica.coneccion

mensaje = MsgBox("Se ha dado de baja correctamente el periodo solicitado",


vbInformation, "PERIODO ELIMINADO")
limpiar

Else

mensaje = MsgBox("Ya hay cargados turnos en ese periodo para ese medico",
vbCritical, "IMPOSIBLE ELIMINAR")

End If
datos.CerrarTabla sqlturnos
End If

End Sub

‘Este botón permite seleccionar un médico

Private Sub cmdselmedico_Click()

frmselmedicos.Show vbModal
txtnromedico = frmselmedicos.xnromedico
txtmedico = frmselmedicos.xmedico
txtespecialidad = frmselmedicos.xespecialidad

End Sub

Private Sub cmdcerrar_Click()


Unload Me
End Sub

Página 211
* DESCARGA DEL FORMULARIO

Private Sub Form_Unload(Cancel As Integer)


datos.CerrarConeccion modclinica.coneccion
End Sub

* PROCEDIMIENTOS

Sub cargaraltas(xhoradesde, xhorahasta)

Dim vhora, vminutos, vsegundos

vhoraingresada = xhoradesde

While xhorahasta > vhoraingresada

vhora = Mid(Format(vhoraingresada, "HH:MM:SS"), 1, 2) 'y ahi obtienes la hora


vminutos = Mid(Format(vhoraingresada, "HH:MM:SS"), 4, 2) 'los minutos y
vsegundos = Mid(Format(vhoraingresada, "HH:MM:SS"), 7, 2) 'los segundos

sql = "INSERT INTO turnos (fecha, nromedico, medico, especialidad) "


sql = sql + "VALUES (format(#" + Conver.FechaATex(vfechaingresada) + " " + vhora
+ ":" + vminutos + ":" + vsegundos + "#, 'mm/dd/yyyy hh:mm:ss')"
sql = sql + ", " + Str(vnromedico)
sql = sql + ", '" + vmedico + "'"
sql = sql + ", '" + vespecialidad + "'"
sql = sql + ")"

datos.realizarSQL sql, modclinica.coneccion

vhoraingresada = vhoraingresada + txtrango ' TOMAR DEL TEXTBOX

Wend

End Sub

Página 212
Sub buscarmedico()

If Trim(txtnromedico.Text) <> "" Then

If IsNumeric(txtnromedico) Then

If BuscarRegistro("nromedico", txtnromedico, "int", modclinica.coneccion,


sqlmedicos, "medicos") Then
'vmedico = Cargas.Buscar("nromedico", "apellido" & ", " & "nombre",
txtnromedico, "int", modclinica.coneccion, sqlmedicos, "medicos")
vmedico = Cargas.Buscar("nromedico", "apellido", txtnromedico, "int",
modclinica.coneccion, sqlmedicos, "medicos")
vmedico = vmedico + " " + Cargas.Buscar("nromedico", "nombre", txtnromedico,
"int", modclinica.coneccion, sqlmedicos, "medicos")
txtmedico = vmedico
vespecialidad = Cargas.Buscar("nromedico", "especialidad", txtnromedico, "int",
modclinica.coneccion, sqlmedicos, "medicos")
txtespecialidad = vespecialidad
txtfechadesde.SetFocus
Else
txtnromedico = ""
txtmedico = ""
txtespecialidad = ""
End If

Else
mensaje = MsgBox("Debe Ingresar un dato numerico en el numero de medico",
vbCritical, "Medico")
txtnromedico = ""
txtmedico = ""
txtnromedico.SetFocus

End If

End If

End Sub

* EVENTO LOSTFOCUS DEL TEXTBOX DEL MEDICO

Private Sub txtnromedico_LostFocus()


buscarmedico
End Sub

* EVENTO KEYPRESS DE CADA TEXTBOX

Private Sub txtnromedico_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
txtespecialidad.SetFocus
End If

End Sub

Página 213
Private Sub txtespecialidad_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
txtfechadesde.SetFocus
End If

End Sub

Private Sub txtfechadesde_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
txtfechahasta.SetFocus
End If

End Sub

Private Sub txtfechahasta_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
txtrango.SetFocus
End If

End Sub

Private Sub txtrango_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
cmdcargar.SetFocus
End If

End Sub

‘Este procedimiento limpia el valor de todas las variables para poder realizar un nuevo
proceso

Private Sub limpiarvariables()

vnromedico = 0
vmedico = ""
vespecialidad = ""

vlunes = 0
vhoradesdelunes = 0
vhorahastalunes = 0

vmartes = 0
vhoradesdemartes = 0
vhorahastamartes = 0

vmiercoles = 0
vhoradesdemiercoles = 0
vhorahastamiercoles = 0

vjueves = 0
vhoradesdejueves = 0

Página 214
vhorahastajueves = 0

vviernes = 0
vhoradesdeviernes = 0
vhorahastaviernes = 0

vsabado = 0
vhoradesdesabado = 0
vhorahastasabado = 0

vdomingo = 0
vhoradesdedomingo = 0
vhorahastadomingo = 0

End Sub

‘Esta función verifica el ingreso correcto de todos los valores

Private Function ValidacionDatosFormulario() As Boolean

Dim k As Integer
ValidacionDatosFormulario = False

If Trim(txtmedico) = "" Then


k = MsgBox("Debe Ingresar el medico", vbCritical, " Nombre y Apellido")
txtmedico.SetFocus
Exit Function
End If

If Trim(txtespecialidad) = "" Then


k = MsgBox("Debe Ingresar la especialidad", vbCritical, " Especialidad ")
txtespecialidad.SetFocus
Exit Function
End If

If Trim(txtfechadesde) = "" Then


k = MsgBox("Debe Ingresar una fecha valida", vbCritical, " Fecha Desde ")
txtfechadesde.SetFocus
Exit Function
End If

If Trim(txtfechadesde) <> "" Then


If Not IsDate(Trim(txtfechadesde)) Then
k = MsgBox("Debe Ingresar una fecha valida", vbCritical, " Fecha Desde ")
txtfechadesde.SetFocus
Exit Function
End If
End If

If Trim(txtfechahasta) = "" Then


k = MsgBox("Debe Ingresar una fecha valida", vbCritical, " Fecha Hasta ")
txtfechahasta.SetFocus
Exit Function
End If

Página 215
If Trim(txtfechahasta) <> "" Then
If Not IsDate(Trim(txtfechahasta)) Then
k = MsgBox("Debe Ingresar una fecha valida", vbCritical, " Fecha Hasta ")
txtfechahasta.SetFocus
Exit Function
End If
End If

If vbtneliminar = False Then

If Trim(txtrango) = "" Then


k = MsgBox("Debe Ingresar el tiempo de visita", vbCritical, " Tiempo de Visita ")
txtrango.SetFocus
Exit Function
End If

If Mid(Trim(txtrango), 3, 1) <> ":" Then


k = MsgBox("Debe Ingresar un rango valido", vbCritical, " tiempo de visita ")
txtrango.SetFocus
Exit Function
End If

If Mid(Trim(txtrango), 6, 1) <> ":" Then


k = MsgBox("Debe Ingresar una hora valida", vbCritical, " tiempo de visita ")
txtrango.SetFocus
Exit Function
End If

If Len(Trim(txtrango)) <> 8 Then


k = MsgBox("Debe Ingresar una hora valida", vbCritical, " tiempo de visita ")
txtrango.SetFocus
Exit Function
End If

End If

ValidacionDatosFormulario = True

End Function

‘Este procedimiento limpia toda la pantalla dejando los textbox en … no elimina


registros

Private Sub limpiar()

txtnromedico = ""
txtmedico = ""
txtespecialidad = ""
txtfechadesde = ""
txtfechahasta = ""
txtrango = ""

End Sub

Página 216
TURNOS PACIENTES
PANTALLA AGENDA

‘DECLARACION DE VARIABLES

Option Explicit

Dim tabladia As ADODB.Recordset

Dim vfecha As String


Dim vmedico As String
Dim vespecialidad As String

Dim mensaje As String

Dim sql As String


Dim titulo As String

Dim cont As Integer

Private Sub Form_Load()

modclinica.datosconeccion
datos.AbrirConeccion modclinica.coneccion, modclinica.dbconeccion,
modclinica.dbpath, modclinica.dbpass

imgagenda.Width = frmagenda.Width
imgagenda.Height = frmagenda.Height
imgagenda.Picture = LoadPicture(App.Path + "\imagenes\agenda.jpg")

cldmes1.object = date
lblfecha.Caption = cldmes1.object
lbldiasemana.Caption = WeekdayName(Weekday(lblfecha.Caption))

modclinica.estilogrilla msflexman
modclinica.estilogrilla msflextarde

vfecha = date
vmedico = txtmedico.Text
modclinica.completardia msflexman, msflextarde, vfecha, vmedico

End Sub

* EVENTO CLICK DE LOS BOTONES DE COMANDO

‘Este botón pasa dia por dia al dia anterior

Private Sub cmdanterior_Click()


cldmes1.object = cldmes1.object - 1
lblfecha.Caption = cldmes1.object
lbldiasemana.Caption = WeekdayName(Weekday(lblfecha.Caption))
vfecha = lblfecha.Caption
vmedico = txtmedico.Text
modclinica.completardia msflexman, msflextarde, vfecha, vmedico
End Sub

Página 217
‘Este botón pasa dia por dia al dia siguiente

Private Sub cmdsiguiente_Click()

cldmes1.object = cldmes1.object + 1
lblfecha.Caption = cldmes1.object
lbldiasemana.Caption = WeekdayName(Weekday(lblfecha.Caption))
vfecha = lblfecha.Caption
vmedico = txtmedico.Text
modclinica.completardia msflexman, msflextarde, vfecha, vmedico

End Sub

‘Este botón habilita el calendario para poder seleccionar 1 día

Private Sub cmdcalendario_Click()


cldmes1.Visible = True
End Sub

‘Este botón muestra en un label el día seleccionado en el calendario

Private Sub cldmes1_Click()

lblfecha.Caption = cldmes1.object
lbldiasemana.Caption = WeekdayName(Weekday(lblfecha.Caption))
vfecha = lblfecha.Caption
vmedico = txtmedico.Text
modclinica.completardia msflexman, msflextarde, vfecha, vmedico

cldmes1.Visible = False

End Sub

‘Este botón permite seleccionar 1 médico

Private Sub cmdselmedico_Click()

If Trim(txtespecialidad) = "" Then


especialidadelegida = ""
Else
especialidadelegida = txtespecialidad
End If

frmselmedicos.Show vbModal
txtnromedico = frmselmedicos.xnromedico
txtmedico = frmselmedicos.xmedico
txtespecialidad = frmselmedicos.xespecialidad
lblfecha.Caption = cldmes1.object
lbldiasemana.Caption = WeekdayName(Weekday(lblfecha.Caption))
vfecha = lblfecha.Caption
vmedico = txtmedico.Text
modclinica.completardia msflexman, msflextarde, vfecha, vmedico
modclinica.buscarhorariosmedicos txtnromedico, txthorario

End Sub

Página 218
‘Este botón permite seleccionar 1 especialidad

Private Sub cmdselespecialidad_Click()

frmselespecialidad.Show vbModal
txtnromedico = frmselmedicos.xnromedico
txtmedico = frmselmedicos.xmedico
txtespecialidad = frmselespecialidad.xespecialidad

lblfecha.Caption = cldmes1.object
lbldiasemana.Caption = WeekdayName(Weekday(lblfecha.Caption))

txtnromedico = ""
txtmedico = ""
txthorario = ""

vfecha = lblfecha.Caption
vmedico = txtmedico.Text
vespecialidad = txtespecialidad.Text

modclinica.completardia msflexman, msflextarde, vfecha, vmedico


modclinica.buscarhorariosmedicos txtnromedico, txthorario

End Sub

Private Sub cmdsalir_Click()


Unload Me
MDIPrincipal.Show
End Sub

Private Sub cmdimprmir_Click()


titulo = "TURNOS DEL DR/A: " & Trim(txtmedico) & " Fecha: " & Trim(lblfecha)

imprimircitas titulo, msflexman, True


imprimircitas titulo, msflextarde, False

Printer.EndDoc

End Sub

Private Sub imprimircitas(xtitulo As String, Xgrilla As msFlexGrid, xencabezado


As Boolean)

ReDim vectortitulos(1 To 3) As String

vectortitulos(1) = "Hora"
vectortitulos(2) = "Paciente"

imprimirturnos.imprimirprint Xgrilla, titulo, Xgrilla.Rows, 3, 2, , xencabezado

End Sub

Página 219
* EVENTO CLICK DE LA GRILLA

Private Sub msflexman_Click()


buscarfecha msflexman
End Sub

Private Sub msflextarde_Click()


buscarfecha msflextarde
End Sub

* PROCEDIMIENTOS

Private Sub buscarfecha(Xgrilla As msFlexGrid)


Dim vid As Long

Xgrilla.col = 1

If Trim(Xgrilla.Text) <> "" Then


vid = Xgrilla.Text

sql = "SELECT * FROM turnos "


sql = sql + "WHERE id = " + Str(vid)

datos.AbrirRecordsetSQL tabladia, sql, modclinica.coneccion

completardatos

datos.CerrarTabla tabladia

Else

MsgBox "El medico solicitado no atiende en ese dia y horario"

End If

End Sub

‘Este proceso completa los datos de la tabla de turnos en un nuevo formulario que me
permite cargar el paciente y otros datos del turno a suministrar

Private Sub completardatos()

If Not IsNull(tabladia.Fields("id")) Then


frmturnos.txtid = tabladia.Fields("id")
End If

If Not IsNull(tabladia.Fields("nromedico")) Then


frmturnos.txtnromedico = tabladia.Fields("nromedico")
End If

If Not IsNull(tabladia.Fields("medico")) Then


frmturnos.txtmedico = tabladia.Fields("medico")
End If

Página 220
If Not IsNull(tabladia.Fields("nropaciente")) Then
frmturnos.txtnropaciente = tabladia.Fields("nropaciente")
End If

If Not IsNull(tabladia.Fields("paciente")) Then


frmturnos.txtpaciente = tabladia.Fields("paciente")
End If

If Not IsNull(tabladia.Fields("fecha")) Then


frmturnos.txtfecha = Left(tabladia.Fields("Fecha"), 10)
End If

If Not IsNull(tabladia.Fields("fecha")) Then


frmturnos.txthora = Format(tabladia.Fields("Fecha"), "hh:mm:ss")
End If

If Not IsNull(tabladia.Fields("estado")) Then


Cargas.mostraritemcombo frmturnos.cmbestado, Trim(tabladia.Fields("estado"))
End If

If Not IsNull(tabladia.Fields("nrobono")) Then


frmturnos.txtnrobono = tabladia.Fields("nrobono")
End If

If Not IsNull(tabladia.Fields("abreviatura")) Then


frmturnos.txtabreviaturaest = tabladia.Fields("abreviatura")
End If

If Not IsNull(tabladia.Fields("estudio")) Then


frmturnos.txtestudio = tabladia.Fields("estudio")
End If

If Not IsNull(tabladia.Fields("precio")) Then


frmturnos.txtimporte = tabladia.Fields("precio")
End If

If Not IsNull(tabladia.Fields("observaciones")) Then


frmturnos.txtobservaciones = tabladia.Fields("observaciones")
End If

frmturnos.Show vbModal

End Sub

* DESCARGA DEL FORMULARIO

Private Sub Form_Unload(Cancel As Integer)


datos.CerrarConeccion modclinica.coneccion
End Sub

Página 221
TURNOS PACIENTES
PANTALLA DATOS DEL TURNO A DAR

En esta pantalla solo debemos completar datos en registros existentes en la tabla de turnos y por esto no se trata del código de un AMB
completo. El proceso principal esta dado en la modificación de un registro que lo hacemos con un UPDATE de las instrucciones SQL.
Vamos a ejemplificarlo con alguno de los registros que se mostraron en el proceso automático de alta de turnos.
Aquí estarían los primeros registros:

id fecha nromedico medico especialidad


19425 22/07/2010 02:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19426 22/07/2010 02:15:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19427 22/07/2010 02:30:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19428 22/07/2010 02:45:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19429 22/07/2010 03:00:00 p.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19430 26/07/2010 11:00:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19431 26/07/2010 11:15:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA
19432 26/07/2010 11:30:00 a.m. 2 SFORZINI LUIS TRAUMATOLOGIA

y luego de completar esta pantalla utilizando el codigo del update podría por ejemplo completarse de la siguiente manera:

id nropaciente paciente estado observaciones nrobono abreviatura estudio precio importeprofesional


19425 ……… 9 FERNANDEZ DISARLI NAHUEL Pendiente 160 2 Consulta 35 20
19426 ……… 0 0 20
19427 ……… MICELOTA GRACIELA Pendiente 02 Consulta 35 20
19428 ……… 14 GUEVARA AILIN MACARENA Pendiente 02 Consulta 35 20
19429 ……… 7 NOCITI GUSTAVO Pendiente 02 Consulta 35 20
19430 ……… 9 FERNANDEZ DISARLI NAHUEL Pendiente 167 CONSULTA 35 0
19431 ……… 10 ZAMBELLI ANGELA Pendiente 166 CONSULTA 35 0
19432 ……… 0 0 0

Página 222
Como se puede observar solo se han completado datos como el nombre del paciente,
el estado de la transacción, observaciones, número de bono, codificación del estudio
(abreviatura), el estudio, el precio y el importe que corresponde al profesional en un
registro existente en la misma tabla de turnos.

CODIGO

‘DECLARACION DE VARIABLES

Option Explicit
Dim sql As String
Dim respuesta

Dim sqlpacientes As ADODB.Recordset

Dim vid As Long


Dim vfecha As String
Dim vhora As String
Dim vestado As String
Dim vnromedico As Long
Dim vmedico As String
Dim vnropaciente As String
Dim vpaciente As String
Dim vnrobono As Long
Dim vabreviatura As String
Dim vestudio As String
Dim vprecio As Double
Dim vobservaciones As String

Private Sub Form_Load()

cmbestado.AddItem "Pendiente", 0
cmbestado.AddItem "Atendido", 1
cmbestado.AddItem "Ausente", 2
cmbestado.ListIndex = 0

End Sub

Página 223
* EVENTO CLICK DE LOS BOTONES

‘Este botón es el que permite hacer el update para completar los datos
correspondiente al turno que se esta asignando

Private Sub cmdcargar_Click()

If ValidacionDatosFormulario() Then
cargavariables

sql = "UPDATE turnos SET turnos.nropaciente = '" + vnropaciente + "' "


sql = sql + ", turnos.paciente = '" + vpaciente + "' "
sql = sql + ", turnos.estado = '" + vestado + "' "

sql = sql + ", turnos.nrobono =" + Str(vnrobono)


sql = sql + ", turnos.abreviatura = '" + vabreviatura + "' "
sql = sql + ", turnos.estudio = '" + vestudio + "' "
sql = sql + ", turnos.precio = " + Str(vprecio)

sql = sql + ", turnos.observaciones = '" + vobservaciones + "' "


sql = sql + "WHERE turnos.id = " + Str(vid)

datos.realizarSQL sql, modclinica.coneccion

vfecha = txtfecha
vmedico = txtmedico
modclinica.completardia frmagenda.msflexman, frmagenda.msflextarde, vfecha,
vmedico

limpiar

Unload Me

End If

End Sub

Página 224
‘Este botón es el que permite cancelar un turno dado. Debido a que para dar el turno
solo se han completado datos de un registro existente no debemos eliminar el registro.
Solo debemos seleccionar el registro correspondiente, blanquear los datos
correspondientes al turno que ha sido dado y hacer el update para actualizar ese
registro con los datos blanqueados.

Private Sub cmdeliminar_Click()


If Trim(txtid.Text <> "") Then
respuesta = MsgBox("esta seguro?", vbYesNo + vbQuestion, "Elimina la Cita")
If (respuesta = vbYes) Then
On Error GoTo Solucion1

txtnropaciente = ""
txtpaciente = ""
cmbestado.ListIndex = 0
txtobservaciones.Text = ""
cargavariables
vnropaciente = ""
vpaciente = ""
vestado = ""
vnrobono = 0
vabreviatura = ""
vestudio = ""
vprecio = 0
vobservaciones = ""

sql = "UPDATE turnos SET turnos.nropaciente = '" + vnropaciente + "' "


sql = sql + ", turnos.paciente = '" + vpaciente + "' "
sql = sql + ", turnos.estado = '" + vestado + "' "
sql = sql + ", turnos.nrobono =" + Str(vnrobono)
sql = sql + ", turnos.abreviatura = '" + vabreviatura + "' "
sql = sql + ", turnos.estudio = '" + vestudio + "' "
sql = sql + ", turnos.precio = " + Str(vprecio)
sql = sql + ", turnos.observaciones = '" + vobservaciones + "' "
sql = sql + "WHERE turnos.id = " + Str(vid)
datos.realizarSQL sql, modclinica.coneccion
respuesta = MsgBox("El turno fue cancelado", vbInformation, "Turno Cancelado ")

Else
respuesta = MsgBox("El turno no fue Cancelado", vbExclamation, "TURNO NO
CANCELADO ")
End If
End If
vfecha = txtfecha
vmedico = txtmedico
modclinica.completardia frmagenda.msflexman, frmagenda.msflextarde, vfecha,
vmedico
limpiar
Unload Me
Exit Sub

Solucion1:
MsgBox "error:" & Err & Chr$(13) & Err.Description, vbExclamation, "Existe un
problema"
End Sub

Página 225
‘Este botón permite seleccionar un paciente
Private Sub cmdselpacientes_Click()

frmselpacientes.Show vbModal
txtnropaciente = frmselpacientes.xnropaciente
txtpaciente = frmselpacientes.xapellido & " " & frmselpacientes.xnombre
txtnrobono.SetFocus

End Sub

‘Este botón permite seleccionar un estudio

Private Sub cmdselestudio_Click()

frmselestudios.Show vbModal
txtabreviaturaest = frmselestudios.xabreviatura
txtestudio = frmselestudios.xestudio
txtimporte = frmselestudios.ximporte
cmbestado.SetFocus

End Sub

Private Sub cmdcerrar_Click()

vfecha = txtfecha
vmedico = txtmedico
modclinica.completardia frmagenda.msflexman, frmagenda.msflextarde, vfecha,
vmedico
Unload Me

End Sub

* EVENTO LOSTFOCUS DEL TEXTBOX DEL PACIENTE

Private Sub txtnropaciente_LostFocus()


buscarpaciente
End Sub

* EVENTO KEYPRESS DE LOS TEXTBOX

Private Sub txtnropaciente_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
txtnrobono.SetFocus
End If

End Sub

Private Sub txtnrobono_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
cmdselestudio.SetFocus
End If

End Sub

Página 226
Private Sub cmdselestudio_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
cmbestado.SetFocus
End If

End Sub

* PROCEDIMIENTOSY FUNCIONES

‘Este procedimiento carga los datos escritos en cada uno de los textbox a variables

Public Sub cargavariables()

vid = TexALng(Trim(txtid))
vnropaciente = Trim(txtnropaciente)
vpaciente = Trim(txtpaciente)
vestado = Trim(cmbestado)
vnrobono = TexALng(Trim(txtnrobono))
vabreviatura = Trim(txtabreviaturaest)
vestudio = Trim(txtestudio)
vprecio = TexADou(Trim(txtimporte))
vobservaciones = Trim(txtobservaciones)

End Sub

‘Este procedimiento limpia toda la pantalla dejando los textbox en blanco y las casillas
desmarcadas… no elimina registros

Sub limpiar()

txtid = ""
txtnropaciente = ""
txtpaciente = ""
txtfecha = ""
txthora = ""
cmbestado.ListIndex = 0
txtnromedico = ""
txtmedico = ""
txtnrobono = ""
txtabreviaturaest = ""
txtestudio = ""
txtimporte = ""
txtobservaciones = ""

End Sub

Página 227
‘Este procedimiento busca el paciente y pone los datos del mismo en el textbox, en
caso de no existir el paciente limpia los textbox que contengan estos datos

Sub buscarpaciente()

If Trim(txtnropaciente.Text) <> "" Then

If IsNumeric(txtnropaciente) Then

If BuscarRegistro("nropaciente", txtnropaciente, "str", modclinica.coneccion,


sqlpacientes, "pacientes") Then
vpaciente = Cargas.Buscar("nropaciente", "apellido", txtnropaciente, "str",
modclinica.coneccion, sqlpacientes, "pacientes")
vpaciente = vpaciente & " " & Cargas.Buscar("nropaciente", "nombre",
txtnropaciente, "str", modclinica.coneccion, sqlpacientes, "pacientes")
txtpaciente = vpaciente
Else
txtnropaciente = ""
txtpaciente = ""
End If

Else
respuesta = MsgBox("Debe Ingresar un dato numerico en el numero de paciente",
vbCritical, "Paciente")
txtnropaciente = ""
txtpaciente = ""
txtnropaciente.SetFocus

End If

End If

End Sub

Página 228
‘ Esta función verifica si la carga de cada uno de los datos es correcta y devuelve valor
verdadero o falso de acuerdo a si los datos son o no correctos

Private Function ValidacionDatosFormulario() As Boolean


Dim k As Integer
ValidacionDatosFormulario = False

If Trim(txtpaciente) = "" Then


respuesta = MsgBox("Debe Ingresar el paciente ", vbCritical, " Paciente ")
txtpaciente.SetFocus
Exit Function
End If

If Not IsDate(Trim(txtfecha)) Then


respuesta = MsgBox("Debe Ingresar una fecha valida", vbCritical, " Fecha de la cita
")
txtfecha.SetFocus
Exit Function
End If

'validacion hora

If Mid(Trim(txthora), 3, 1) <> ":" Then


respuesta = MsgBox("Debe Ingresar una hora valida", vbCritical, " hora de la cita ")
txthora.SetFocus
Exit Function
End If

If Mid(Trim(txthora), 6, 1) <> ":" Then


respuesta = MsgBox("Debe Ingresar una hora valida", vbCritical, " hora de la cita ")
txthora.SetFocus
Exit Function
End If

If Len(Trim(txthora)) <> 8 Then


respuesta = MsgBox("Debe Ingresar una hora valida", vbCritical, " hora de la cita ")
txthora.SetFocus
Exit Function
End If

If Len(Trim(txtobservaciones)) > 255 Then


k = MsgBox("Solo puede ingresar hasta 255 caracteres", vbCritical, "
Observaciones ")
txtobservaciones.SetFocus
Exit Function
End If

ValidacionDatosFormulario = True
End Function

Página 229
PANTALLA PLANILLA DIARIA

‘DECLARACION DE VARIABLES GENERAL/DECLARACIONES

Dim tablaturnos As ADODB.Recordset


Dim vbotonbuscar As Boolean

Private Sub Form_Load()

modclinica.datosconeccion
datos.AbrirConeccion modclinica.coneccion, modclinica.dbconeccion,
modclinica.dbpath, modclinica.dbpass

MacGridStr1.COLUMNAS = 8
MacGridStr1.RENGLONES = 10
MacGridStr1.Inicializar

txtdesde = date

'cargar imagenes de los botones


Cargas.ImagenBoton cmdbuscar, "BINOCULR.ico"
Cargas.ImagenBoton cmdactualizar, "note16.ico"
Cargas.ImagenBoton cmdimprimir, "impresora.bmp"
Cargas.ImagenBoton cmdsalir, "salir1.ico"

vbotonbuscar = False

TituloGrilla

End Sub

* EVENTO CLICK DE CADA UNO DE LOS BOTONES

‘Este botón permite seleccionar un médico


Private Sub cmdselmedico_Click()

frmselmedicos.Show vbModal
txtnromedico = frmselmedicos.xnromedico
txtmedico = frmselmedicos.xmedico
txtespecialidad = frmselmedicos.xespecialidad

End Sub

‘Este botón permite seleccionar una especialidad


Private Sub cmdselespecialidad_Click()

frmselespecialidad.Show vbModal
txtespecialidad = frmselespecialidad.xespecialidad

End Sub

Página 230
‘Este botón permite buscar información según los criterios ingresados y determinar
cuál fue la plata ingresada y lo que se le debe abonar a cada profesional

Private Sub cmdbuscar_Click()

If ValidacionDatosFormulario(txtdesde, txthasta) Then


mostrargrilla
MacGridStr1.Sumar MacGridStr1, 5
txtingresos = MacGridStr1.SUMA
MacGridStr1.Sumar MacGridStr1, 7
txtegresos = MacGridStr1.SUMA

If vbotonbuscar = True Then


cmdactualizar.Enabled = True
End If
vbotonbuscar = True

End If

End Sub

‘Este boton actualiza los datos en la tabla de turnos en el caso de que se hayan
modificado datos en la grilla ya que la misma es editable

Private Sub cmdactualizar_Click()

If ValidacionDatosGrilla(MacGridStr1) Then
actualizar
MacGridStr1.Sumar MacGridStr1, 5
txtingresos = MacGridStr1.SUMA
MacGridStr1.Sumar MacGridStr1, 7
txtegresos = MacGridStr1.SUMA
cmdactualizar.Enabled = False
End If

End Sub

‘Este botón limpia toda la pantalla dejando los textbox en blanco … no elimina
registros

Private Sub cmdlimpiarmedico_Click()

txtnromedico = ""
txtmedico = ""
txtespecialidad = ""

End Sub

Página 231
‘Este botón imprime la planilla mostrada en pantalla

Private Sub cmdimprimir_Click()

MacGridStr1.imprimir

Printer.CurrentX = 5
Printer.Print "TOTAL INGRESOS: " + txtingresos.Text
Printer.CurrentX = 5
Printer.Print "TOTAL EGRESOS: " + txtegresos.Text

Printer.EndDoc

End Sub

‘Este botón sale de la pantalla verificando previamente si es necesario actualizar los


datos

Private Sub cmdsalir_Click()

If cmdactualizar.Enabled = True Then


resp = MsgBox("Va salir de la planilla sin actualizar datos ... esta seguro de salir?",
vbYesNo + vbQuestion, "Salir")
If (resp = vbYes) Then
Unload Me
End If
Else
Unload Me
End If

End Sub

* SALIDA DEL FORMULARIO

Private Sub Form_Unload(Cancel As Integer)


datos.CerrarConeccion modclinica.coneccion
End Sub

* EVENTO KEYPRESS DE CADA UNO DE LOS TEXTBOX

Private Sub txtdesde_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
txthasta.SetFocus
End If

End Sub

Private Sub op_nrobono_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
cmdbuscar.SetFocus
End If

End Sub

Página 232
Private Sub op_medico_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then
cmdbuscar.SetFocus
End If

End Sub

* PROCEDIMIENTOS Y FUNCIONES

‘Este procedimiento genera la instrucción sql de búsqueda de acuerdo a los criterios


ingresado y los muestra en la grilla

Private Sub mostrargrilla()

MacGridStr1.limpiar
TituloGrilla
bwhere = False
sql = "SELECT id, format(fecha,'dd/mm/yyyy'), estudio, nrobono, precio, medico,
format(importeprofesional, ' ##,##0.##') FROM turnos "
sql = sql + "WHERE paciente <> ''"

bwhere = True

If Trim(txtmedico) <> "" Then


If bwhere = True Then
sql = sql + " and "
Else
sql = sql + " Where "
bwhere = True
End If
sql = sql + "medico ='" + txtmedico + "'"
End If

If Trim(txtespecialidad) <> "" Then


If bwhere = True Then
sql = sql + " and "
Else
sql = sql + " Where "
bwhere = True
End If
sql = sql + "especialidad ='" + txtespecialidad + "'"
End If

If Trim(txtnrobono) <> "" Then

If bwhere = True Then


sql = sql + " and "
Else
sql = sql + " Where "
bwhere = True
End If
sql = sql + "nrobono =" + Str(txtnrobono)

End If

Página 233
If Trim(txtdesde <> "") Then
If bwhere = True Then
sql = sql + " and "
Else
sql = sql + " Where "
bwhere = True
End If
sql = sql + "fecha >= format(#" + txtdesde + " 00:00:00#, 'mm/dd/yyyy hh:mm:ss')"
If Trim(txthasta = "") Then
sql = sql + " AND fecha <= format(#" + txtdesde + " 23:59:59#, 'mm/dd/yyyy
hh:mm:ss')"
End If
End If

If Trim(txthasta <> "") Then


If bwhere = True Then
sql = sql + " and "
Else
sql = sql + " Where "
bwhere = True
End If
sql = sql + "fecha <= format(#" + txthasta + " 23:59:00#, 'mm/dd/yyyy hh:mm:ss')"
End If

If op_nrobono Then
sql = sql + " ORDER BY nrobono"
End If

If op_medico Then
sql = sql + " ORDER BY medico"
End If

If op_fecha Then
sql = sql + " ORDER BY fecha"
End If

datos.AbrirRecordsetSQL tablaturnos, sql, modclinica.coneccion

If Not (tablaturnos.EOF And tablaturnos.BOF) Then


MacGridStr1.Cargar tablaturnos
'Cargas.CargarGrilla msgrilla, tablalistado
End If

datos.CerrarTabla tablaturnos

End Sub

Página 234
‘ Este procedimiento actualiza los importes de la planilla en el caso que se hayan
modificado ya que la grilla es editable

Private Sub actualizar()

Dim vcont As Integer

MacGridStr1.CantidadFilas

For vcont = 1 To MacGridStr1.FILAS - 1

MacGridStr1.COLUMNA = 1
MacGridStr1.RENGLON = vcont
vid = MacGridStr1.obtenerItem
MacGridStr1.COLUMNA = 7
vimporteprofesional = TexADou(Trim(MacGridStr1.obtenerItem))

If Trim(vid = "") Or vid = 0 Then


Exit Sub
Else
sql = "UPDATE turnos SET turnos.importeprofesional = " + Str(vimporteprofesional)
sql = sql + " WHERE turnos.id = " + Str(vid)

datos.realizarSQL sql, modclinica.coneccion

End If

Next

End Sub

‘Este procedimiento muestra los títulos de cada una de las columnas de la grilla

Public Sub TituloGrilla()

MacGridStr1.RENGLON = 0
MacGridStr1.ANCHO = 0
MacGridStr1.anchoColumna
MacGridStr1.titulo = " "
MacGridStr1.tituloColumna

MacGridStr1.COLUMNA = 1
MacGridStr1.RENGLON = 0
MacGridStr1.ANCHO = 0
MacGridStr1.anchoColumna
MacGridStr1.titulo = " ID "
MacGridStr1.tituloColumna

MacGridStr1.COLUMNA = 2
MacGridStr1.RENGLON = 0
MacGridStr1.ANCHO = 1000
MacGridStr1.anchoColumna
MacGridStr1.titulo = "Fecha"
MacGridStr1.tituloColumna

Página 235
MacGridStr1.COLUMNA = 3
MacGridStr1.RENGLON = 0
MacGridStr1.ANCHO = 4500
MacGridStr1.anchoColumna
MacGridStr1.titulo = "Estudio"
MacGridStr1.tituloColumna

MacGridStr1.COLUMNA = 4
MacGridStr1.RENGLON = 0
MacGridStr1.ANCHO = 1000
MacGridStr1.anchoColumna
MacGridStr1.titulo = "Nro Bono"
MacGridStr1.tituloColumna

MacGridStr1.COLUMNA = 5
MacGridStr1.RENGLON = 0
MacGridStr1.ANCHO = 1500
MacGridStr1.anchoColumna
MacGridStr1.titulo = "Precio"
MacGridStr1.tituloColumna

MacGridStr1.COLUMNA = 6
MacGridStr1.RENGLON = 0
MacGridStr1.ANCHO = 1500
MacGridStr1.anchoColumna
MacGridStr1.titulo = "Medico"
MacGridStr1.tituloColumna

MacGridStr1.COLUMNA = 7
MacGridStr1.RENGLON = 0
MacGridStr1.ANCHO = 1500
MacGridStr1.anchoColumna
MacGridStr1.titulo = "Importe Profesional"
MacGridStr1.tituloColumna

End Sub

‘Esta función verifica si la carga de cada uno de los datos es correcta y devuelve valor
verdadero o falso de acuerdo a si los datos son o no correctos

Private Function ValidacionDatosFormulario(xdesde As TextBox, xhasta As


TextBox) As Boolean

Dim k As Integer
ValidacionDatosFormulario = False
If Trim(xdesde) <> "" And Not IsDate(Trim(xdesde)) Then
k = MsgBox("Debe Ingresar un formato de fecha en fecha desde", vbCritical,
"Fecha")
xdesde.SetFocus
Exit Function
End If

ValidacionDatosFormulario = True

End Function

Página 236
‘Esta función verifica cada uno de los datos modificado en la grilla es correcta y
devuelve valor verdadero o falso de acuerdo a si los datos son o no correctos

Private Function ValidacionDatosGrilla(msFlexGrid As Control) As Boolean

Dim k As Integer
Dim vcont As Integer

ValidacionDatosGrilla = False

msFlexGrid.CantidadFilas

For vcont = 1 To msFlexGrid.FILAS - 1

msFlexGrid.COLUMNA = 7 'xcol
msFlexGrid.RENGLON = vcont
If Trim(msFlexGrid.obtenerItem) <> "" And Not IsNumeric(msFlexGrid.obtenerItem)
Then
k = MsgBox("Debe Ingresar todos datos numericos en el importe del profesional",
vbCritical, "Importe Profesional")
Exit Function
End If
Next

ValidacionDatosGrilla = True

End Function

Página 237
ETAPA DE PRUEBA

PRUEBAS UNITARIAS

PU – 001
Objetivo Probar acceso erróneo a la máquina del
sistema
Entrada Correr archivo ejecutable del sistema
Salida Error de Comunicación
Condiciones No hay restricciones para esta prueba
Procedimiento 1- Hacer clic en el acceso directo al
sistema
2- Mensaje de error “Archivo Inexistente”
Prerrequisitos Dar de baja la maquina donde se
encuentra la aplicación y la base de datos

PU – 002
Objetivo Probar acceso exitoso a la máquina del
sistema
Entrada Correr archivo ejecutable del sistema
Salida Error de Comunicación
Condiciones No hay restricciones para esta prueba
Procedimiento 1- Hacer clic en el acceso directo al
sistema
2- Mensaje de error “Archivo Inexistente”
Prerrequisitos Levantar la máquina donde se encuentra
la aplicación y la base de datos

PU – 003
Objetivo Probar acceso erróneo a la base de datos
Entrada tperez 123
Salida Ingreso al sistema
Condiciones No se permite el acceso a la base de
datos de otros programas mientras se
realizan las pruebas
Procedimiento 1- Ingresar usuario y contraseña
2- Hacer clic en Aceptar
3- Mensaje Error “No hay conexión a la
base de datos”
Prerrequisitos Levantar la máquina donde se encuentra
la aplicación y la base de datos

Página 238
PU – 004
Objetivo Probar acceso exitoso a la base de datos
Entrada tperez 123
Salida Ingreso al sistema
Condiciones No se permite el acceso a la base de
datos de otros programas mientras se
realizan las pruebas
Procedimiento 1- Ingresar usuario y contraseña
2- Hacer clic en Aceptar
3- Se deberá observar en la pantalla el
menú del sistema con todas las opciones
del sistema para las que tenga
autorización por parte del administrador.
Prerrequisitos Levantar la máquina donde se encuentra
la aplicación y la base de datos

PU – 005
Objetivo Probar una autenticación errónea
Entrada user1 xxx
Salida Usuario o Clave inválido
Condiciones No hay restricciones para esta prueba
Procedimiento 1- Ingresar usuario y contraseña
2- Hacer clic en Aceptar
3- Se deberá observar en la pantalla el
menú del sistema
Prerrequisitos Levantar el servidor de aplicaciones

PU – 006
Objetivo Probar una autenticación exitosa
Entrada user1 123
Salida Acceso al Sistema
Condiciones No hay restricciones para esta prueba
Procedimiento 1- Ingresar usuario y contraseña
2- Hacer clic en Aceptar
3- Se deberá observar en la pantalla el
menú del sistema
Prerrequisitos Levantar el servidor de aplicaciones

PRUEBAS DEL SISTEMA

Código Objetivo Acción


CP-01 Verificar Usuario Probar un ingreso exitoso al
Administrador sistema con usuario de
“Administrador”
CP-02 Incorporar Usuario Ingresar Nuevo Usuario
CP-03 Incorporar Usuario Intentar Ingresar Usuario
Existente
CP-04 Incorporar Usuario Ingresar al sistema con los
permisos del nuevo usuario
ingresado
CP-05 Cambiar Clave Cambiar exitosamente la clave
de acceso de un usuario
CP-06 Inhabilitar Usuario Eliminar un usuario

Página 239
CP-07 Insertar Paciente Ingresar un nuevo paciente
CP-08 Insertar Paciente Intentar ingresar un paciente
existente
CP-09 Validar Datos Ingresar Paciente con datos
erróneos
CP-10 Validar Datos Ingresar Paciente sin alguno de
los datos obligarios
CP-11 Modificar Paciente Modificar Correctamente un
Paciente
CP-12 Modificar Paciente Intentar modificar un paciente
Inexistente
CP-13 Eliminar Paciente Eliminar Correctamente un
paciente
CP-14 Eliminar Paciente Intentar eliminar un paciente
inexistente
CP-15 Eliminar Paciente Intentar eliminar un paciente
con turnos cargados
CP-16 Insertar Médico Ingresar un nuevo médico
CP-17 Insertar Médico Intentar ingresar un médico
CP-18 Validar Datos Ingresar Médico con datos
erróneos
CP-19 Validar Datos Ingresar Médico sin alguno de
los datos obligarios
CP-20 Modificar Médico Modificar Correctamente un
Médico
CP-21 Modificar Médico Intentar modificar un Médico
Inexistente
CP-22 Eliminar Médico Eliminar Correctamente un
Médico
CP-23 Eliminar Médico Intentar eliminar un Médico
inexistente
CP-24 Eliminar Médico Intentar eliminar un Médico con
turnos cargados
CP-25 Insertar Estudios Ingresar un nuevo Estudio
CP-26 Insertar Estudios Intentar ingresar un Estudio
existente
CP-27 Validar Estudios Ingresar un Estudio con datos
erróneos
CP-28 Validar Estudios Ingresar un Estudio sin alguno
de los datos obligarios
CP-29 Modificar Estudios Modificar Correctamente un
Estudio
CP-30 Modificar Estudios Intentar modificar un Estudio
Inexistente
CP-31 Eliminar Estudios Eliminar Correctamente un
Estudio
CP-32 Eliminar Estudios Intentar eliminar un Estudio
inexistente
CP-33 Eliminar Estudios Intentar eliminar un Estudio con
turnos cargados
CP-34 Insertar Horario Médico Ingresar un nuevo Horario
Médico
CP-35 Insertar Horario Médico Intentar ingresar un Horario

Página 240
Médico existente
CP-36 Validar Horario Médico Ingresar un Horario Médico con
datos erróneos
CP-37 Validar Horario Médico Ingresar un Horario Médico sin
alguno de los datos obligarios
CP-38 Modificar Horario Médico Modificar Correctamente un
Horario Médico
CP-39 Modificar Horario Médico Intentar modificar un Horario
Médico Inexistente
CP-40 Eliminar Horario Médico Eliminar Correctamente un
Horario Médico
CP-41 Eliminar Horario Médico Intentar eliminar un Horario
Médico inexistente
CP-42 Eliminar Horario Médico Intentar eliminar un Horario
Médico habilitado en la agenda
CP-43 Ingresar Alta de un Período Ingresar un nuevo período para
un médico
CP-44 Ingresar Alta de un Período Intentar ingresar un período
existente
CP-45 Ingresar Alta de un Período Intentar ingresar un nuevo
período con datos erróneos
CP-46 Eliminar un período Eliminar un período existente
CP-47 Eliminar un período Intentar eliminar un período que
tenga turnos asignados
CP-48 Eliminar un período Intentar eliminar un período que
no exista
CP-49 Asignar un turno Asignar un nuevo turno
CP-50 Asignar un turno Intentar asignar un turno en un
horario que no se atiende
CP-51 Asignar un turno Intentar asignar un turno con
datos erróneos
CP-52 Cancelar un turno Cancelar un turno
CP-53 Cancelar un turno Intentar cancelar un turno no
asignado
CP-54 Imprimir turnos Imprimir los turnos del dia para
un médico
CP-55 Obtener Resultados Planilla Consultar Planilla para una
Diaria fecha
CP-56 Obtener Resultados Planilla Consultar Planilla para un
Diaria médico
CP-57 Obtener Resultados Planilla Consultar Planilla para una
Diaria fecha y un médico específico
CP-58 Obtener Resultados Planilla Consultar con parámetros
Diaria erróneos
CP-59 Obtener Resultados Planilla Consultar con parámetros para
Diaria los cuales se conoce que no
hay información ingresada

Página 241
PRUEBA DE INTEGRACION

PI – 001
Objetivo Dar de alta un paciente
Entrada Apellido: García
Nombre: Juan Alberto
Dirección: Santa Fe 2378 3 “A”
Localidad: CABA
Teléfono: 4.826.9887
Email: jagarcia@hotmail.com
Fecha nacimiento: 23/08/1930
Edad: 80
Sexo: masculino
Documento: DNI: 2876565
Estado Civil: Viudo
Profesión: Jubilado
Fecha Alta: 4/07/2011
Salida Paciente ingresado y actualizado en la
grilla
Se actualiza la tabla de Pacientes
Condiciones No hay restricciones
Procedimiento 1 – Ingresar desde el menú principal al
menú “Pacientes”
2- Ingresar apellido, nombre, dirección,
localidad, teléfono, email, fecha de
nacimiento, edad, sexo, documento,
estado civil, profesión, fecha de alta y
observaciones del paciente
3- Hacer clic en Agregar
4- Se deberá observar en la grilla
Prerrequisitos 1 – Levantar el servidor de aplicaciones
2 – Ingresar al sistema con usuario tperez
y clave 123

PI – 002
Objetivo Dar de alta un médico
Entrada Nro médico: 1233
Apellido: Belloso
Nombre: Gonzalo
Dirección: San Luis 3054 3 “B”
Localidad: CABA
Código postal: 1425
Teléfono: 4.962-7788
Celular: 15 -5-277-8766
Fax: -
Email: gonbelloso@gmail.com
Especialidad: Cardiólogo
Salida Médico ingresado y actualizado en la
grilla
Se actualiza la tabla de Médicos
Condiciones No hay restricciones
Procedimiento 1 – Ingresar desde el menú principal al
menú “Médicos”
2- Ingresar nro de médico, apellido,

Página 242
nombre, dirección, localidad, código
postal, teléfono, celular, fax, email,
especialidad y observaciones del médico
3- Hacer clic en Agregar
4- Se deberá observar en la grilla
Prerrequisitos 1 – Levantar el servidor de aplicaciones
2 – Ingresar al sistema con usuario tperez
y clave 123

PI – 003
Objetivo Dar de alta un estudio
Entrada Abreviatura: LAB
Estudio: Laboratorio
Precio: 100
Observaciones:
Salida Estudio ingresado y actualizado en la
grilla
Se actualiza la tabla de Estudios
Condiciones No hay restricciones
Procedimiento 1 – Ingresar desde el menú principal al
menú “Estudios”
2- Ingresar abreviatura, estudio, precio y
observaciones
3- Hacer clic en Agregar
4- Se deberá observar en la grilla
Prerrequisitos 1 – Levantar el servidor de aplicaciones
2 – Ingresar al sistema con usuario tperez
y clave 123

PI – 004
Objetivo Dar de alta un horario médico
Entrada Médico: Belloso Gonzalo
Día: Lunes
Hora Desde: 09:00
Hora Hasta: 13:00
Observaciones:
Salida Dar de alta un horario médico ingresado y
actualizado en la grilla
Se actualiza la tabla de Horarios
Condiciones No hay restricciones
Procedimiento 1 – Ingresar desde el menú principal al
menú “Horarios Médicos”
2- Ingresar médico, dias de atención,
horarios y observaciones
3- Hacer clic en Agregar
4- Se deberá observar en la grilla
Prerrequisitos 1 – Levantar el servidor de aplicaciones
2 – Ingresar al sistema con usuario tperez
y clave 123

Página 243
PI – 005
Objetivo Dar de alta período en la agenda para el
médico
Entrada Apellido: Belloso Gonzalo
Fecha Desde: 01/09/2011
Fecha Hasta: 30/09/2011
Tiempo visita: 00:30:00
Salida Mensaje de “Agenda Habilitada
Exitosamente”
Alta de registros en la tabla de turnos
Condiciones No hay restricciones
Procedimiento 1 – Ingresar desde el menú principal al
menú “Alta Turnos Médicos”
2- Ingresar Médico, Fecha Desde, Fecha
Hasta, Tiempo Visita
3- Hacer clic en Cargar Fechas
Prerrequisitos 1 – Levantar el servidor de aplicaciones
2 – Ingresar al sistema con usuario tperez
y clave 123

PI – 006
Objetivo Asignar un turno
Entrada Médico: Belloso Gonzalo
Paciente: García Juan Alberto
Seleccionar Fecha: 19/09/2011
Horario: 10:00
Salida Se actualiza la tabla de Turnos
Visualizacion del paciente en la agenda
Condiciones No hay restricciones
Procedimiento 1 – Ingresar desde el menú principal al
menú “Turnos Pacientes”
2- Seleccionar Médico
3- Seleccionar Fecha
4- Seleccionar Horario
3- Hacer clic en el horario
4- Seleccionar paciente
5- Completar datos del turno (bono /
importe)
6 – Hacer click en cargar turnos
Prerrequisitos 1 – Levantar el servidor de aplicaciones
2 – Ingresar al sistema con usuario tperez
y clave 123

Página 244
PI – 007
Objetivo Consultar Planilla Diaria
Entrada Fecha: 19/09/2011
Médico: Belloso Gonzalo
Salida Turnos Asignados para el médico Belloso
Gonzalo para el 19/09/2011 visualizados
en la grilla
Condiciones No hay restricciones
Procedimiento 1 – Ingresar desde el menú principal al
menú “Planilla Diaria”
2- Ingresar Médico, Fecha Desde
3- Hacer clic en Buscar
Prerrequisitos 1 – Levantar el servidor de aplicaciones
2 – Ingresar al sistema con usuario tperez
y clave 123

Página 245
ETAPA DE IMPLEMENTACION

Dentro del contexto de desarrollo del presente trabajo, se deberá proceder a la


instalación del siguiente software:

Sistema Operativo Windows 2000 Server con el Service Pack 6, en el equipo


Servidor
Sistema Operativo Windows XP , en el equipo cliente
Access en el equipo servidor
Driver de conexión a la base de datos MDAC_TYP(2.8) en cada cliente

Página 246

También podría gustarte