Database
 sql >> Base de Dados >  >> RDS >> Database

Um modelo de dados para um aplicativo de agendamento de consultas médicas


Marcar uma consulta médica usando um aplicativo online é uma inovação que simplifica todo o processo. Vamos mergulhar no modelo de dados por trás de um aplicativo de agendamento de consultas.

Por que usar um aplicativo? Isso torna mais fácil para as pessoas encontrarem os médicos de sua escolha, permitindo que elas vejam os registros profissionais do médico e as avaliações dos pacientes. Quando alguém encontra um médico de que gosta, pode marcar uma consulta sem sair do aplicativo. Um aplicativo também pode ajudar os médicos a manter o tempo de espera de seus pacientes o mais curto possível, ajudá-los a agendar seus pacientes e permitir que eles fiquem de olho nas avaliações on-line dos pacientes.

Requisitos do aplicativo de consulta médica


Em resumo, esperamos que nosso aplicativo:
  • Permitir que os pacientes pesquisem médicos de várias especializações (médico de família, cardiologista, podólogo etc.) por localidade.
  • Mostrar uma lista ordenada de médicos com base em seus anos de experiência, distância do local do paciente, recomendações do paciente e índices de avaliação (classificação coletiva do paciente quanto ao comportamento à beira do leito, tempo de espera, equipe etc.)
  • l>
  • Mostre os honorários iniciais e de acompanhamento dos médicos.
  • Capture e exiba perfis de médicos, incluindo detalhes sobre seus diplomas, certificações, estágios e afiliações anteriores e atuais com hospitais.
  • Registre comentários sobre médicos de usuários de aplicativos. Esta revisão fornecerá uma visualização completa dos médicos e sua equipe para outros usuários do aplicativo.

E não se esqueça do ponto de venda exclusivo do aplicativo:mostrar os próximos compromissos disponíveis e permitir que os usuários reservem um .

Categorização dos requisitos do aplicativo


Basicamente, podemos dividir os requisitos do aplicativo nessas quatro áreas:
  1. Gerenciando dados de médicos – Os médicos podem se registrar e inserir todos os seus dados.
  2. Gerenciamento de OPD dos médicos (Departamento ambulatorial) e detalhes da clínica – Os médicos (ou sua equipe) podem registrar detalhes sobre sua clínica ou agenda e disponibilidade de OPD.
  3. Gerenciando dados de clientes e avaliações – Os usuários podem se registrar e inserir seus dados básicos. Eles também podem postar avaliações sobre médicos.
  4. Gerenciando compromissos – Os usuários podem pesquisar médicos com base em determinados critérios.

Vejamos essas áreas individualmente.

Gerenciando dados de médicos


Os médicos podem se registrar no aplicativo preenchendo alguns detalhes obrigatórios, mas o recurso de agendamento de consultas é ativado somente depois que eles completam seu perfil completo. Isso inclui suas qualificações (graus profissionais, certificações/especializações e estágios) e suas afiliações passadas e atuais com hospitais e prestadores de serviços de saúde.

As tabelas mostradas abaixo gerenciam essas informações.



O doctor table armazena detalhes elementares sobre médicos, que eles inserem durante o registro. As colunas desta tabela são:

  • id – Um número exclusivo que o aplicativo atribui aos médicos durante o registro.
  • first_name – Nome do médico.
  • last_name – Sobrenome do médico.
  • professional_statement – Uma visão detalhada das qualificações do médico, experiência, seu lema profissional, etc. Essas informações são inseridas pelo médico e exibidas na página de perfil de cada médico.
  • practicing_from – A data em que o médico começou a praticar medicina. Isso tem um significado profundo, pois o aplicativo obterá sua classificação de experiência para cada médico com base nas informações desta coluna.

A specialization tabela contém todas as especializações médicas existentes como ortopedia, neurologista, dentista, etc. Um médico pode ter mais de uma especialização; na verdade, é bastante comum que um médico se especialize em áreas afins. Por exemplo, um neurologista também pode ser um psiquiatra; um ginecologista pode ser um endocrinologista, e assim por diante. Portanto, a doctor_specialization tabela permite uma relação muitos-para-muitos entre o doctor e specialization mesas. Os atributos nessas duas tabelas são autoexplicativos.

A qualification tabela armazena detalhes sobre a formação de médicos e qualificações profissionais, incluindo diplomas, certificações, trabalhos de pesquisa, seminários, treinamentos contínuos, etc. Para facilitar os vários tipos de detalhes de qualificação, dei a esses campos nomes bastante genéricos:
  • id – A chave primária da tabela.
  • doctor_id – Refere-se ao doctor tabela e relaciona o médico com a qualificação.
  • qualification_name – Significa o nome do grau, certificação, trabalho de pesquisa, etc.
  • institute_name – A instituição que emitiu a qualificação para o médico. Pode ser uma universidade, uma instituição médica, uma associação internacional de médicos etc.
  • procurement_year – A data em que a qualificação foi obtida ou concedida.

A hospital_affiliation tabela mantém informações sobre afiliações dos médicos com hospitais e prestadores de serviços de saúde. Esses dados são apenas para exibição no perfil de um médico e não têm importância no recurso de agendamento de consultas. Os detalhes do OPD (Departamento Ambulatorial) são inseridos separadamente e serão tratados posteriormente neste artigo.

As colunas desta tabela são:
  • id – A chave primária da tabela.
  • doctor_id – Refere-se ao doctor tabela e vincula o médico ao hospital afiliado.
  • hospital_name – O nome do hospital afiliado.
  • city and country – A cidade e o país onde o hospital está localizado. Essas colunas de endereço não desempenham nenhum papel na função de pesquisa do aplicativo; eles são apenas para exibição no perfil do médico.
  • start_date – Quando começou a afiliação do médico ao hospital.
  • end_date – Quando a afiliação terminou. É anulável porque as afiliações atuais não terão uma data de término.

Gerenciando OPD dos médicos/Detalhes da clínica


As informações nesta seção são inseridas pelos médicos (ou seus funcionários) e desempenham um papel significativo nas funcionalidades de pesquisa e agendamento do aplicativo.



O office A tabela contém informações sobre o Ambulatório dos hospitais aos quais os médicos são afiliados, bem como suas próprias clínicas (ou seja, consultórios ou cirurgias). As colunas desta tabela são:

  • id – A chave primária desta tabela.
  • doctor_id – Refere-se ao doctor tabela e indica o médico relevante.
  • hospital_affiliation_id –Significa o hospital onde o médico está disponível para OPD. Como a coluna é aplicável a OPDs, mas não a clínicas, ela é anulável.
  • time_slot_per_client_in_min – Armazena o tempo (em minutos) destinado às consultas. O número de minutos é inserido pelos médicos com base em sua experiência. Essa coluna ajuda o aplicativo a determinar o próximo slot disponível. Observe que esse número não garante a duração da consulta, mas ajuda a minimizar o tempo de espera do paciente se ele usar o aplicativo para agendar uma consulta.
  • first_consultation_fee – A taxa cobrada pelo médico para uma consulta inicial. Isso pode parecer sem importância, mas é muito importante para a função de busca; a taxa é um critério de filtro muito comum.
  • followup_consultation_fee – Muitos médicos cobram menos por uma consulta de acompanhamento do que por uma consulta inicial. Esta coluna armazena o custo da consulta de acompanhamento.
  • street_address – O endereço do OPD ou clínica do hospital.
  • city , state e country –A cidade, estado e país onde o hospital ou clínica está localizado.
  • zip – O código postal onde se encontra a clínica ou hospital. Muitas vezes, as pessoas pesquisam médicos em áreas próximas usando um código postal, portanto, esse campo será importante para a função de pesquisa do aplicativo.

Por que existe uma tabela “escritório” separada quando os detalhes do OPD podem ser facilmente rastreados na tabela “hospital_affiliation”?


Três razões:
  • Um médico pode ser afiliado a um hospital para um aspecto de seu trabalho (ou seja, realizar cirurgias), mas não para outros (ou seja, atender pacientes sem atendimento). Podemos perder essas afiliações se tentarmos manter os detalhes do escritório no hospital_affiliation somente tabela.
  • Muitos médicos não são afiliados a hospitais, mas têm suas próprias clínicas ou consultórios. Também precisamos armazenar informações para esses médicos.
  • Um médico pode ter vários consultórios em locais diferentes ou pode trabalhar em várias filiais de um hospital. Se o médico for mostrado apenas como afiliado a um local do hospital, podemos perder algumas informações. É por isso que mantemos detalhes de endereço separados.

A office_doctor_availability table armazena a disponibilidade de OPD/clínica dos médicos em termos de horários (digamos, 2 horas pela manhã e 4 horas à noite). Dividir o dia dessa maneira é bastante comum, portanto, faz sentido ter uma tabela adicional para armazenar os slots de disponibilidade. Além disso, os médicos podem trabalhar em mais de um turno de OPD. As colunas desta tabela são:
  • id – A chave primária da tabela.
  • office_id – Refere-se à tabela “escritório”.
  • day_of_week – O dia da semana, ou seja, segunda-feira, terça-feira etc. Isso permite que os médicos tenham disponibilidades diferentes para dias diferentes (fins de semana x dias da semana, por exemplo).
  • start_time – Quando o médico estiver pronto para o primeiro paciente.
  • end_time – Quando o compromisso ou turno final está programado para terminar.
  • is_available – Permite que os médicos marquem sua disponibilidade para dias ou horários específicos. Esta coluna é inicializada com um 'Y' como padrão e é atualizada para um 'N' quando os médicos marcam sua indisponibilidade.
  • reason_of_unavailablity – Muitos médicos preferem divulgar por que não estão disponíveis ou devem cancelar uma consulta. Isso ajuda a construir uma relação transparente entre médicos e seus pacientes. Como é opcional, mantive isso como coluna anulável.

O in_network_insurance tabela armazena informações de seguro. Em muitos países, os serviços médicos são muito caros e o seguro de saúde é obrigatório. Nesses casos, esta tabela contém os detalhes sobre quais seguradoras são totalmente aceitas no OPD ou clínica do hospital.

Gerenciando dados de clientes e avaliações


Para um paciente, registrar-se no aplicativo requer muito poucas informações. Daqui em diante, usarei 'cliente' em vez de 'usuário' ou 'paciente'.



A client_account tabela armazena detalhes básicos para os clientes. Esses detalhes são capturados no momento do registro. As colunas desta tabela são:

  • id – Um número único atribuído a cada cliente.
  • first_name – O primeiro nome do cliente.
  • last_name – O sobrenome do cliente.
  • contact_number – O número de telefone do cliente, preferencialmente um número de telemóvel, para o qual podem ser enviadas as informações da marcação. Este também é o número pelo qual o cliente pode ser contatado pela equipe do consultório do médico.
  • email – O endereço de e-mail do cliente. O aplicativo pode enviar lembretes de compromissos aos clientes.

O client_review table não apenas oferece feedback (ou seja, avaliações de clientes) para médicos, mas também ajuda clientes em potencial a escolher médicos. É um componente integral deste aplicativo. As colunas desta tabela são:
  • id – A chave primária desta tabela.
  • user_account_id – Indica qual usuário está enviando a avaliação.
  • doctor_id – O médico que está sendo avaliado.
  • is_review_anonymous – Se o nome do cliente será publicado com a avaliação ou não. Este é um recurso de segurança para clientes.
  • wait_time_rating – Esta coluna numérica contém uma classificação que varia de 1 (pior) a 10 (melhor). Ele reflete a opinião do cliente sobre quanto tempo esperou para ver o médico.
  • bedside_manner_rating – Armazena a opinião do cliente sobre o comportamento do médico à beira do leito (ou seja, se o médico é gentil, compassivo, se comunica bem, etc.)
  • overall_rating – Avaliação do cliente de sua experiência geral com o médico.
  • review – Os clientes podem dar seus comentários detalhados aqui.
  • is_doctor_recommended – Esta coluna indicadora indica se o cliente recomendaria o médico.
  • review_date – Quando a revisão foi enviada.

Gerenciando compromissos


Esta seção é o principal USP (Unique Selling Point) para este aplicativo, pois permite que os clientes verifiquem a disponibilidade de vários médicos e marquem uma consulta.



O appointment tabela contém detalhes de compromissos para os clientes. Suas colunas incluem:

  • id – Um número único é atribuído a cada compromisso. Este número é referenciado em outro lugar.
  • user_account_id – Qual cliente está marcando a consulta.
  • office_id – Indica qual médico e qual OPD ou clínica do hospital está envolvido na consulta.
  • probable_start_time – Esta é uma coluna de carimbo de data/hora que contém a provável hora de início do compromisso. Os horários de início das consultas médicas geralmente são prováveis ​​e não absolutos.
  • actual_end_time – A hora real de término da consulta. Inicialmente esta coluna fica em branco, pois muitos fatores podem influenciar no término de um compromisso. Portanto, esta é uma coluna que permite valor nulo.
  • appointment_status_id – Isso é referenciado no appointment_status tabela e significa o status atual do compromisso. Os valores possíveis para o status são “ativo”, “cancelado” e “completo”. Inicialmente o status seria “ativo”. Ele se tornaria “completo” uma vez que a nomeação fosse feita. Ele será "cancelado" se o cliente cancelar seu agendamento.
  • appointment_taken_date – A data em que a nomeação foi feita.
  • app_booking_channel_id – O canal através do qual um compromisso foi reservado. Existem vários canais pelos quais as consultas são feitas:pelo aplicativo, ligando para o hospital, ligando para o médico ou seu consultório etc.

Veja o modelo de dados completo




A função de pesquisa em ação


Vamos procurar um oftalmologista no CEP 63101. Os resultados da pesquisa devem ser ordenados pelos seguintes critérios:
  • Mais experiência
  • Classificação de recomendação de cliente mais alta
  • Menor taxa de consulta inicial

Aqui está o 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;

O que você adicionaria?


O que mais pode ser adicionado a este aplicativo e a este modelo de dados? Compartilhe suas opiniões nos comentários.