Sistema de Citas Médicas — Análisis y Diseño
Representan las interacciones del sistema entre los actores y las funcionalidades principales
graph LR
Paciente(("🧑 Paciente"))
Medico(("🩺 Médico"))
Admin(("🛠️ Administrador"))
SistemaSMS["📱 Sistema SMS"]
SistemaCorreo["📧 Sistema Correo"]
subgraph Autenticacion["🔐 Módulo de Autenticación"]
CU1["CU-01: Iniciar Sesión\n(C.C. + Contraseña)"]
CU2["CU-02: Recuperar\nContraseña\n(Correo / SMS)"]
CU3["CU-03: Registrarse\n(Si pertenece a la EPS)"]
CU4["CU-04: Autenticar\nvía SMS"]
end
subgraph GestionCitas["📅 Módulo de Gestión de Citas"]
CU5["CU-05: Reservar Cita"]
CU6["CU-06: Seleccionar\nTipo de Cita"]
CU7["CU-07: Seleccionar\nMédico y Horario"]
CU8["CU-08: Confirmar\nReserva de Cita"]
CU9["CU-09: Cancelar Cita"]
CU10["CU-10: Reagendar Cita"]
end
subgraph Notificaciones["🔔 Módulo de Notificaciones"]
CU11["CU-11: Enviar\nConfirmación\n(Correo + SMS)"]
CU12["CU-12: Notificar\nInconvenientes"]
end
Paciente --> CU1
Paciente --> CU2
Paciente --> CU3
Paciente --> CU5
Paciente --> CU9
Paciente --> CU10
CU5 -->|"≪include≫"| CU6
CU6 -->|"≪include≫"| CU7
CU7 -->|"≪include≫"| CU8
CU3 -->|"≪include≫"| CU4
CU8 -->|"≪include≫"| CU11
CU9 -->|"≪extend≫"| CU12
CU10 -->|"≪extend≫"| CU11
Medico --> CU1
Medico --> CU12
Admin --> CU1
Admin --> CU12
SistemaSMS --> CU4
SistemaSMS --> CU11
SistemaCorreo --> CU2
SistemaCorreo --> CU11
style Autenticacion fill:#1e3a5f,stroke:#38bdf8,color:#e2e8f0
style GestionCitas fill:#1e3a5f,stroke:#38bdf8,color:#e2e8f0
style Notificaciones fill:#1e3a5f,stroke:#38bdf8,color:#e2e8f0
Detalle de cada caso de uso con sus actores y requerimientos asociados
| ID | Caso de Uso | Actor Principal | Descripción |
|---|---|---|---|
| CU-01 | Iniciar Sesión | Paciente, Médico, Admin | Autenticarse con C.C. y contraseña |
| CU-02 | Recuperar Contraseña | Paciente | Recuperar o cambiar clave vía correo o SMS |
| CU-03 | Registrarse | Paciente | Registro con datos personales (solo si pertenece a la EPS y no está registrado) |
| CU-04 | Autenticar vía SMS | Sistema SMS | El servidor envía un código SMS para autenticar al usuario |
| CU-05 | Reservar Cita | Paciente | Seleccionar la opción "Reservar cita" para iniciar el proceso |
| CU-06 | Seleccionar Tipo de Cita | Paciente | Elegir tipo: general, odontológica, especialista, etc. |
| CU-07 | Seleccionar Médico y Horario | Paciente | Elegir médico disponible y horario según disponibilidad |
| CU-08 | Confirmar Reserva | Paciente | Ventana de confirmación con detalles del médico, hora y lugar |
| CU-09 | Cancelar Cita | Paciente | Modificar el estado de la reserva a cancelada |
| CU-10 | Reagendar Cita | Paciente | Cambiar doctor/horario según disponibilidad |
| CU-11 | Enviar Confirmación | Sistema SMS/Correo | Enviar SMS y correo de confirmación con doctor, lugar y horario |
| CU-12 | Notificar Inconvenientes | Admin, Médico | Notificar a usuarios sobre problemas con el doctor o la cita |
Describe la estructura del sistema, las entidades, sus atributos, métodos y relaciones
Reglas del sistema que deben reflejarse en la implementación de las clases
Muestra el flujo completo desde el inicio de sesión hasta la confirmación de una cita médica
sequenceDiagram
autonumber
actor P as Paciente
participant App as Aplicacion
participant Auth as Autenticacion
participant SMS as Serv. SMS
participant BD as Base Datos
participant Correo as Serv. Correo
rect rgb(240, 245, 255)
Note over P, Auth: FASE 1 - Autenticacion
P->>App: Ingresa C.C. y contrasena
App->>Auth: validarCredenciales(cc, pass)
Auth->>BD: consultarUsuario(cc)
BD-->>Auth: datosUsuario
alt Credenciales validas
Auth-->>App: Autenticacion exitosa
App-->>P: Mostrar menu principal
else Credenciales invalidas
Auth-->>App: Error de autenticacion
App-->>P: Mostrar error
end
end
rect rgb(240, 255, 245)
Note over P, BD: FASE 2 - Reservar Cita
P->>App: Selecciona Reservar Cita
App->>BD: obtenerTiposCita()
BD-->>App: listaTiposCita
App-->>P: Mostrar tipos de cita
P->>App: Selecciona tipo de cita
App->>BD: obtenerMedicos(tipoCita)
BD-->>App: listaMedicos
App-->>P: Mostrar medicos
P->>App: Selecciona medico
App->>BD: obtenerHorarios(idMedico)
Note right of BD: Menos de 3 seg
BD-->>App: listaHorarios
App-->>P: Mostrar horarios
end
rect rgb(250, 240, 255)
Note over P, Correo: FASE 3 - Confirmacion
P->>App: Selecciona horario
App->>BD: verificarDisponibilidad(horario)
Note right of BD: Sin doble reserva
BD-->>App: disponible = true
App->>BD: verificarCitaDuplicada(fecha)
Note right of BD: Max 1 cita por dia
BD-->>App: sinDuplicada = true
App-->>P: Ventana de confirmacion
Note over P: Doctor, lugar, fecha, hora
P->>App: Confirmar reserva
App->>BD: crearCita(datos)
BD->>BD: bloquearHorario()
BD-->>App: Cita creada
par Notificaciones
App->>SMS: enviarSMS(detalles)
SMS-->>App: SMS enviado
and
App->>Correo: enviarCorreo(detalles)
Correo-->>App: Correo enviado
end
App-->>P: Cita reservada
end
Flujo de registro con validación EPS y autenticación por SMS
sequenceDiagram
autonumber
actor P as Paciente Nuevo
participant App as Aplicacion
participant Auth as Autenticacion
participant EPS as Sistema EPS
participant SMS as Serv. SMS
participant BD as Base Datos
rect rgb(240, 245, 255)
P->>App: Selecciona Registrarse
App-->>P: Mostrar formulario
P->>App: Ingresa datos completos
Note over P, App: Nombres, C.C., Nacimiento, Celular, Correo
App->>BD: verificarRegistro(cc)
BD-->>App: noRegistrado = true
App->>EPS: validarAfiliacion(cc)
alt Afiliado a la EPS
EPS-->>App: afiliado = true
App->>Auth: generarCodigoSMS()
Auth->>SMS: enviarCodigo(celular)
SMS-->>P: Codigo SMS recibido
P->>App: Ingresa codigo SMS
App->>Auth: validarCodigo(codigo)
alt Codigo valido
Auth-->>App: Autenticacion exitosa
App->>BD: crearUsuario(datos)
BD-->>App: Usuario creado
App-->>P: Registro exitoso
else Codigo invalido
Auth-->>App: Codigo incorrecto
App-->>P: Error, reintentar
end
else No afiliado a la EPS
EPS-->>App: afiliado = false
App-->>P: Error, no pertenece a EPS
end
end
Flujo para modificar el estado de una cita existente
sequenceDiagram
autonumber
actor P as Paciente
participant App as Aplicacion
participant BD as Base Datos
participant SMS as Serv. SMS
participant Correo as Serv. Correo
rect rgb(240, 245, 255)
P->>App: Ver mis citas
App->>BD: obtenerCitas(idPaciente)
BD-->>App: listaCitas
App-->>P: Mostrar citas activas
alt Cancelar Cita
P->>App: Cancelar Cita
App-->>P: Confirmar cancelacion?
P->>App: Confirmar
App->>BD: cancelarCita(idCita)
BD->>BD: liberarHorario()
BD-->>App: Cita cancelada
App->>SMS: notificar(celular)
App->>Correo: notificar(correo)
App-->>P: Cancelacion exitosa
else Reagendar Cita
P->>App: Reagendar Cita
App->>BD: obtenerHorarios(idMedico)
BD-->>App: horariosDisponibles
App-->>P: Mostrar horarios
P->>App: Selecciona nuevo horario
App->>BD: verificarDisponibilidad()
BD-->>App: disponible = true
App->>BD: reagendarCita(idCita)
BD->>BD: liberarAnterior()
BD->>BD: bloquearNuevo()
BD-->>App: Cita reagendada
par Notificaciones
App->>SMS: enviarSMS(detalles)
and
App->>Correo: enviarCorreo(detalles)
end
App-->>P: Reagendado exitoso
end
end