Diagramas UML del Curso

Sistema de Citas Médicas — Análisis y Diseño

📋 Diagrama de Casos de Uso

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
                    

📝 Descripción de Casos de Uso

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

🏗️ Diagrama de Clases

Describe la estructura del sistema, las entidades, sus atributos, métodos y relaciones

⚙️ Restricciones y Requerimientos No Funcionales

Reglas del sistema que deben reflejarse en la implementación de las clases

⚡ Rendimiento

  • Carga de la app en menos de 2 segundos
  • Horarios disponibles mostrados en menos de 3 segundos
  • Soporte mínimo de 30,000 usuarios concurrentes

📱 Compatibilidad

  • Android 8.0+ (API 26)
  • iOS 13+
  • Chrome, Safari, Firefox (web)

🔒 Seguridad y Datos

  • Datos de pacientes protegidos y privados
  • No doble reserva en mismo horario/médico
  • No doble reserva de un paciente en el mismo día
  • Persistencia de datos sin pérdida

🎨 Diseño y Escalabilidad

  • Interfaz amigable e intuitiva
  • Diseño escalable a futuro
  • Escalamiento automático según usuarios registrados

🔄 Diagrama de Secuencia — Reservar Cita

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
                    

📝 Diagrama de Secuencia — Registro de Paciente

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
                    

🔄 Diagrama de Secuencia — Cancelar / Reagendar Cita

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