sql >> Base de Datos >  >> RDS >> Database

Un modelo de datos para una aplicación de reserva de citas médicas

Reservar una cita médica a través de una aplicación en línea es una innovación que simplifica todo el proceso. Profundicemos en el modelo de datos detrás de una aplicación de reserva de citas.

¿Por qué usar una aplicación? Hace que sea más fácil para las personas encontrar a los médicos de su elección, permitiéndoles ver los registros profesionales del médico y las revisiones de los pacientes. Cuando alguien encuentra un médico que le gusta, puede programar una cita con él sin salir de la aplicación. Una aplicación también puede ayudar a los médicos a mantener los tiempos de espera de sus pacientes lo más cortos posible, ayudarlos a programar a sus pacientes y permitirles estar atentos a las revisiones en línea de los pacientes.

Requisitos de la aplicación para citas médicas

En resumen, esperamos que nuestra aplicación:

  • Permita a los pacientes buscar médicos de diversas especialidades (médico de familia, cardiólogo, podólogo, etc.) por ubicación.
  • Muestre una lista ordenada de médicos en función de sus años de experiencia, su distancia desde la ubicación del paciente, sus recomendaciones para el paciente y sus índices de revisión (calificación colectiva de los pacientes sobre la atención al paciente, el tiempo de espera, el personal, etc.)
  • Muestre las tarifas de consulta inicial y de seguimiento de los médicos.
  • Capture y muestre los perfiles de los médicos, incluidos los detalles sobre sus títulos, certificaciones, pasantías y afiliaciones pasadas y actuales con hospitales.
  • Registre reseñas sobre médicos de los usuarios de la aplicación. Esta revisión brindará una vista previa completa de los médicos y su personal a otros usuarios de la aplicación.

Y no olvide el punto de venta único de la aplicación:mostrar las próximas citas disponibles y permitir que los usuarios reserven una .

Categorización de los requisitos de la aplicación

Básicamente, podemos dividir los requisitos de la aplicación en estas cuatro áreas:

  1. Gestión de los datos de los médicos – Los médicos pueden registrarse e ingresar todos sus detalles.
  2. Gestión del OPD (Departamento ambulatorio) de los médicos y los detalles de la clínica – Los médicos (o su personal) pueden registrar detalles sobre su clínica u horario y disponibilidad de OPD.
  3. Gestión de datos de clientes y revisiones – Los usuarios pueden registrarse e ingresar sus datos básicos. También pueden publicar reseñas sobre médicos.
  4. Gestión de citas – Los usuarios pueden buscar médicos según ciertos criterios.

Veamos estas áreas individualmente.

Gestión de los datos de los médicos

Los médicos pueden registrarse en la aplicación completando ciertos detalles obligatorios, pero la función de reserva de citas se habilita solo después de completar su perfil completo. Esto incluye sus calificaciones (títulos profesionales, certificaciones/especializaciones y pasantías) y sus afiliaciones pasadas y actuales con hospitales y proveedores de servicios de atención médica.

Las tablas que se muestran a continuación gestionan esta información.

El doctor tabla almacena detalles elementales sobre los médicos, que ingresan durante el registro. Las columnas de esta tabla son:

  • id – Un número único que la aplicación asigna a los médicos durante el registro.
  • first_name – Nombre del médico.
  • last_name – Apellido del médico.
  • professional_statement – Una descripción detallada de las calificaciones, la experiencia, el lema profesional del médico, etc. Esta información la ingresa el médico y se muestra en la página de perfil de cada médico.
  • practicing_from – La fecha en que el médico comenzó a ejercer la medicina. Esto tiene una gran importancia, ya que la aplicación derivará su calificación de experiencia para cada médico en función de la información de esta columna.

La specialization la tabla contiene todas las especializaciones médicas existentes como ortopedia, neurólogo, dentista, etc. Un médico puede tener más de una especialización; de hecho, es bastante común que un médico se especialice en campos relacionados. Por ejemplo, un neurólogo también puede ser un psiquiatra; un ginecólogo puede ser endocrinólogo, etc. Por lo tanto, la doctor_specialization table permite una relación de muchos a muchos entre el doctor y specialization mesas. Los atributos de estas dos tablas se explican por sí mismos.

La qualification table almacena detalles sobre la educación de los médicos y las calificaciones profesionales, incluidos títulos, certificaciones, trabajos de investigación, seminarios, capacitación continua, etc. Para facilitar los diversos tipos de detalles de calificación, he dado a estos campos nombres bastante genéricos:

  • id – La clave principal de la tabla.
  • doctor_id – Hace referencia al doctor tabla y relaciona al médico con la calificación.
  • qualification_name – Significa el nombre del título, certificación, trabajo de investigación, etc.
  • institute_name – La institución que expidió el título al médico. Puede ser una universidad, una institución médica, una asociación internacional de médicos, etc.
  • procurement_year – La fecha de obtención o concesión del título.

La hospital_affiliation La tabla mantiene información sobre las afiliaciones de los médicos con hospitales y proveedores de servicios de atención médica. Estos datos solo se muestran en el perfil de un médico y no tienen importancia en la función de reserva de citas. Los detalles del OPD (Departamento de pacientes ambulatorios) se ingresan por separado y se tratarán más adelante en este artículo.

Las columnas de esta tabla son:

  • id – La clave principal de la tabla.
  • doctor_id – Hace referencia al doctor mesa y vincula al médico con el hospital afiliado.
  • hospital_name – El nombre del hospital afiliado.
  • city and country – La ciudad y el país donde está ubicado el hospital. Estas columnas de direcciones no juegan ningún papel en la función de búsqueda de la aplicación; son solo para mostrar en el perfil del médico.
  • start_date – Cuando se inició la afiliación del médico al hospital.
  • end_date – Cuando terminó la afiliación. Es anulable porque las afiliaciones actuales no tendrán una fecha de finalización.

Gestión de los detalles de la clínica/OPD de los médicos

La información de esta sección la ingresan los médicos (o su personal) y juega un papel importante en las funciones de búsqueda y reserva de la aplicación.

La office La tabla contiene información sobre el Departamento de pacientes ambulatorios de los hospitales a los que están afiliados los médicos, así como sobre sus propias clínicas (es decir, consultorios o consultorios). Las columnas de esta tabla son:

  • id – La clave principal de esta tabla.
  • doctor_id – Hace referencia al doctor mesa e indica el médico correspondiente.
  • hospital_affiliation_id –Significa el hospital donde el médico está disponible para OPD. Dado que la columna es aplicable a los OPD pero no a las clínicas, es anulable.
  • time_slot_per_client_in_min – Almacena una cantidad de tiempo (en minutos) asignado a las consultas. Los médicos ingresan la cantidad de minutos en función de su experiencia. Esta columna ayuda a la aplicación a determinar el siguiente espacio disponible. Tenga en cuenta que este número no es una garantía de la duración de la cita, pero ayuda a minimizar los tiempos de espera de los pacientes si usan la aplicación para reservar una cita.
  • first_consultation_fee – La tarifa cobrada por el médico por una visita inicial. Esto puede parecer poco importante, pero es muy importante para la función de búsqueda; la tarifa es un criterio de filtro muy común.
  • followup_consultation_fee – Muchos médicos cobran menos por una visita de seguimiento que por una consulta inicial. Esta columna almacena el costo de la consulta de seguimiento.
  • street_address – La dirección del hospital OPD o clínica.
  • city , state y country –La ciudad, estado y país donde se encuentra el hospital o clínica.
  • zip – El código postal donde se encuentra la clínica u hospital. A menudo, las personas buscan médicos en áreas cercanas mediante un código postal, por lo que este campo será importante para la función de búsqueda de la aplicación.

¿Por qué hay una tabla de "oficina" separada cuando los detalles de OPD se pueden rastrear fácilmente en la tabla "afiliación_hospital"?

Tres razones:

  • Un médico puede estar afiliado a un hospital para un aspecto de su trabajo (es decir, realizar cirugías) pero no para otros (es decir, atender pacientes sin cita previa). Podemos perder dichas afiliaciones si intentamos mantener los detalles de la oficina en hospital_affiliation solo mesa.
  • Muchos médicos no están afiliados a hospitales, pero tienen sus propias clínicas u oficinas. También necesitamos almacenar información para estos médicos.
  • Un médico puede tener varios consultorios en diferentes lugares o puede trabajar en varias sucursales de un hospital. Si el médico solo se muestra como afiliado a una ubicación del hospital, podemos perder cierta información. Esa es la razón por la que mantenemos detalles de dirección separados.

El office_doctor_availability table almacena la disponibilidad de OPD/clínica de los médicos en términos de intervalos de tiempo (digamos 2 horas por la mañana y 4 horas por la noche). Dividir el día de esta manera es bastante común, por lo que tiene sentido tener una mesa adicional para almacenar los espacios disponibles. Además, los médicos pueden trabajar en más de un turno de OPD. Las columnas de esta tabla son:

  • id – La clave principal de la tabla.
  • office_id – Hace referencia a la tabla "oficina".
  • day_of_week – El día de la semana, es decir, lunes, martes, etc. Esto permite que los médicos tengan diferentes disponibilidades para diferentes días (fines de semana o días laborables, por ejemplo).
  • start_time – Cuando el médico esté listo para el primer paciente.
  • end_time – Cuándo está programado que finalice la última cita o turno.
  • is_available – Permite a los médicos marcar su disponibilidad para días o franjas horarias particulares. Esta columna se inicializa con una "Y" por defecto y se actualiza a una "N" cuando los médicos marcan su no disponibilidad.
  • reason_of_unavailablity – Muchos médicos prefieren revelar por qué no están disponibles o deben cancelar una cita. Esto ayuda a construir una relación transparente entre los médicos y sus pacientes. Dado que es opcional, la he mantenido como una columna anulable.

El in_network_insurance tabla almacena información de seguros. En muchos países, los servicios médicos son muy costosos y el seguro médico es obligatorio. En tales casos, esta tabla contiene los detalles sobre qué compañías de seguros son totalmente aceptadas en el OPD del hospital o la clínica.

Administración de datos de clientes y revisiones

Para un paciente, registrarse en la aplicación requiere muy poca información. De ahora en adelante, usaré "cliente" en lugar de "usuario" o "paciente".

La client_account la tabla almacena detalles básicos para los clientes. Estos detalles se capturan en el momento del registro. Las columnas de esta tabla son:

  • id – Un número único asignado a cada cliente.
  • first_name – El nombre del cliente.
  • last_name – El apellido del cliente.
  • contact_number – El número de teléfono del cliente, preferiblemente un número de móvil, al que se le puede enviar la información de la cita. Este es también el número donde el personal del consultorio médico puede contactar al cliente.
  • email – La dirección de correo electrónico del cliente. La aplicación puede enviar recordatorios de citas a los clientes.

La client_review table no solo ofrece comentarios (es decir, reseñas de clientes) para los médicos, sino que también ayuda a los clientes potenciales a elegir médicos. Es un componente integral de esta aplicación. Las columnas de esta tabla son:

  • id – La clave principal de esta tabla.
  • user_account_id – Indica qué usuario está enviando la reseña.
  • doctor_id – El médico que está siendo revisado.
  • is_review_anonymous – Si el nombre del cliente se publicará con la reseña o no. Esta es una característica de seguridad para los clientes.
  • wait_time_rating – Esta columna numérica contiene una calificación que va de 1 (peor) a 10 (mejor). Refleja la opinión del cliente sobre cuánto tiempo esperó para ver al médico.
  • bedside_manner_rating –Almacena la opinión del cliente sobre los modales del médico junto a la cama (es decir, si el médico es amable, compasivo, se comunica bien, etc.)
  • overall_rating – Calificación del cliente de su experiencia general con el médico.
  • review – Los clientes pueden dar su opinión detallada aquí.
  • is_doctor_recommended – Esta columna indicadora establece si el cliente recomendaría al médico.
  • review_date – Cuándo se envió la reseña.

Gestión de citas

Esta sección es el USP (Unique Selling Point) más importante para esta aplicación, ya que permite a los clientes verificar la disponibilidad de varios médicos y reservar una cita.

La appointment la mesa tiene detalles de citas para los clientes. Sus columnas incluyen:

  • id – Se asigna un número único a cada cita. Este número se menciona en otro lugar.
  • user_account_id – Qué cliente reserva la cita.
  • office_id – Indica qué médico y qué hospital OPD o clínica está involucrado en la cita.
  • probable_start_time – Esta es una columna de marca de tiempo que contiene la hora de inicio probable de la cita. Las horas de inicio de las citas médicas suelen ser probables en lugar de absolutas.
  • actual_end_time – La hora real de finalización de la consulta. Inicialmente, esta columna está en blanco, ya que muchos factores pueden influir cuando finaliza una cita. Por lo tanto, esta es una columna anulable.
  • appointment_status_id – Se hace referencia a esto desde el appointment_status tabla, y significa el estado actual de la cita. Los valores posibles para el estado son "activo", "cancelado" y "completo". Inicialmente, el estado sería "activo". Se volvería "completo" una vez que se haga la cita. Se "cancelará" si el cliente cancela su cita.
  • appointment_taken_date – La fecha en que se hizo la cita.
  • app_booking_channel_id – El canal a través del cual se reservó una cita. Existen múltiples canales a través de los cuales se realizan las citas:a través de la aplicación, llamando al hospital, llamando al médico o a su consulta, etc.

Ver el Modelo de Datos Completo




La función de búsqueda en acción

Busquemos un oftalmólogo en el código postal 63101. Los resultados de la búsqueda deben ordenarse según los siguientes criterios:

  • Más experiencia
  • Calificación de recomendación de cliente más alta
  • Tarifa de consulta inicial más baja

Aquí está el código:

SELECT doctor_name, hospital_name, practicing_from, first_consultation_fee, recomm_count FROM
(SELECT d.doctor_id, d.first_name || ‘ ‘ || d.last_name as doctor_name, 
ha.hospital_name, d.practicing_from, o.first_consultation_fee 
FROM office o, doctor d, doctor_specialization ds, specialization s, hospital_affiliation ha 
WHERE o.doctor_id = d.id AND d.id = ds.doctor_id 
AND s.id = ds.specialization_id AND s.specialization_name = ‘Ophthalmologist’
AND o.hospital_affiliation_id = ha.id (+)
AND o.zip = ‘63101’) doctor_detail, 
(SELECT doctor_id, count(1) as recomm_count FROM client_review 
WHERE is_doctor_recommended = ‘Y’ GROUP BY doctor_id) review_count
WHERE doctor_detail.doctor_id = review_count.doctor_id
ORDER BY doctor_detail.practicing_from DESC, review_count.recomm_count DESC doctor_detail.first_consultation_fee ASC;

¿Qué agregarías?

¿Qué más se puede agregar a esta aplicación y este modelo de datos? Comparte tus puntos de vista en los comentarios.