Database
 sql >> Database >  >> RDS >> Database

Un modello di dati per un'app di prenotazione di appuntamenti medici

Prenotare una visita dal medico utilizzando un'app online è un'innovazione che semplifica l'intero processo. Entriamo nel modello di dati dietro un'app per la prenotazione di appuntamenti.

Perché usare un'app? Rende più facile per le persone trovare i medici di loro scelta, consentendo loro di vedere i record professionali del medico e le recensioni dei pazienti. Quando qualcuno trova un medico che gli piace, può prenotare un appuntamento con lui senza uscire dall'app. Un'app può anche aiutare i medici a ridurre il più possibile i tempi di attesa dei loro pazienti, aiutarli a programmare i loro pazienti e consentire loro di tenere d'occhio le recensioni online dei pazienti.

Requisiti dell'app per appuntamenti medici

In breve, ci aspettiamo che la nostra app:

  • Consenti ai pazienti di cercare medici di varie specializzazioni (medico di famiglia, cardiologo, podologo, ecc.) per località.
  • Mostra un elenco ordinato di medici in base ai loro anni di esperienza, alla loro distanza dalla posizione del paziente, ai loro consigli per i pazienti e ai loro indici di revisione (valutazione collettiva dei pazienti sulle modalità al posto letto, tempo di attesa, personale, ecc.)
  • Mostra le spese di consulenza iniziale e di follow-up dei medici.
  • Acquisisci e visualizza i profili dei medici, inclusi i dettagli sui loro diplomi, certificazioni, tirocini e affiliazioni passate e attuali con gli ospedali.
  • Registra le recensioni sui medici dagli utenti dell'app. Questa recensione fornirà un'anteprima completa dei medici e del loro personale ad altri utenti dell'app.

E non dimenticare il punto di forza unico dell'app:mostrare i prossimi appuntamenti disponibili e consentire agli utenti di prenotarne uno .

Categorizzazione dei requisiti dell'app

Fondamentalmente, possiamo dividere i requisiti dell'app in queste quattro aree:

  1. Gestione dei dati dei medici – I medici possono registrarsi e inserire tutti i loro dati.
  2. Gestione dei medici dell'OPD (ambulatorio) e dei dettagli della clinica – I medici (o il loro personale) possono registrare i dettagli sulla loro clinica o il programma e la disponibilità dell'OPD.
  3. Gestione dei dati dei clienti e delle recensioni – Gli utenti possono registrarsi e inserire i propri dati di base. Possono anche pubblicare recensioni sui medici.
  4. Gestione degli appuntamenti – Gli utenti possono cercare medici in base a determinati criteri.

Esaminiamo queste aree singolarmente.

Gestione dei dati dei medici

I medici possono registrarsi con l'app compilando alcuni dettagli obbligatori, ma la funzione di prenotazione degli appuntamenti è abilitata solo dopo aver completato il loro profilo completo. Ciò include le loro qualifiche (diplomi professionali, certificazioni/specializzazioni e tirocini) e le loro affiliazioni passate e attuali con ospedali e fornitori di servizi sanitari.

Le tabelle riportate di seguito gestiscono queste informazioni.

Il doctor la tabella memorizza i dettagli elementari sui medici, che inseriscono durante la registrazione. Le colonne di questa tabella sono:

  • id – Un numero univoco che l'app assegna ai medici durante la registrazione.
  • first_name – Nome del medico.
  • last_name – Cognome del dottore.
  • professional_statement – Una panoramica dettagliata delle qualifiche, dell'esperienza, del motto professionale del medico, ecc. Queste informazioni vengono inserite dal medico e visualizzate nella pagina del profilo di ciascun medico.
  • practicing_from – La data in cui il medico ha iniziato a praticare la medicina. Questo ha un significato profondo, poiché l'app trarrà la sua valutazione dell'esperienza per ciascun medico in base alle informazioni in questa colonna.

La specialization la tabella contiene tutte le specializzazioni mediche esistenti come ortopedico, neurologo, dentista, ecc. Un medico può avere più di una specializzazione; infatti, è abbastanza comune per un medico specializzarsi in campi correlati. Ad esempio, un neurologo può anche essere uno psichiatra; un ginecologo può essere un endocrinologo e così via. Pertanto, il doctor_specialization la tabella consente una relazione molti-a-molti tra il doctor e specialization tavoli. Gli attributi di queste due tabelle sono autoesplicativi.

La qualification la tabella memorizza i dettagli sull'istruzione e le qualifiche professionali dei medici, inclusi titoli di studio, certificazioni, documenti di ricerca, seminari, formazione continua, ecc. Per facilitare i vari tipi di dettagli delle qualifiche, ho assegnato a questi campi nomi abbastanza generici:

  • id – La chiave primaria della tabella.
  • doctor_id – Si riferisce al doctor tabella e mette in relazione il medico con la qualifica.
  • qualification_name – Indica il nome della laurea, della certificazione, della carta di ricerca, ecc.
  • institute_name – L'istituto che ha rilasciato la qualifica al medico. Può essere un'università, un istituto medico, un'associazione internazionale di medici, ecc.
  • procurement_year – La data in cui la qualifica è stata ottenuta o rilasciata.

Il hospital_affiliation la tabella contiene informazioni sulle affiliazioni dei medici con ospedali e fornitori di servizi sanitari. Questi dati sono solo per la visualizzazione sul profilo di un medico e non hanno alcun significato nella funzione di prenotazione dell'appuntamento. I dettagli dell'OPD (ambulatorio) vengono inseriti separatamente e verranno trattati più avanti in questo articolo.

Le colonne di questa tabella sono:

  • id – La chiave primaria della tabella.
  • doctor_id – Si riferisce al doctor tabella e collega il medico all'ospedale convenzionato.
  • hospital_name – Il nome dell'ospedale affiliato.
  • city and country – La città e il paese in cui si trova l'ospedale. Queste colonne di indirizzi non svolgono alcun ruolo nella funzione di ricerca dell'app; sono solo per la visualizzazione sul profilo del medico.
  • start_date – Quando è iniziata l'affiliazione del medico con l'ospedale.
  • end_date – Quando l'affiliazione è terminata. È annullabile perché le attuali affiliazioni non avranno una data di fine.

Gestione dei dettagli dell'OPD/clinica dei medici

Le informazioni in questa sezione vengono inserite dai medici (o dal loro personale) e svolgono un ruolo significativo nelle funzionalità di ricerca e prenotazione dell'app.

L'office la tabella contiene informazioni sull'Ambulatorio degli ospedali ai quali i medici sono affiliati e sui propri ambulatori (es. ambulatori o ambulatori). Le colonne di questa tabella sono:

  • id – La chiave primaria di questa tabella.
  • doctor_id – Si riferisce al doctor tabella e indica il medico di riferimento.
  • hospital_affiliation_id – Indica l'ospedale in cui il medico è disponibile per l'OPD. Poiché la colonna è applicabile agli OPD ma non alle cliniche, è annullabile.
  • time_slot_per_client_in_min – Memorizza una quantità di tempo (in minuti) assegnata per le consultazioni. Il numero di minuti viene inserito dai medici in base alla loro esperienza. Questa colonna consente all'app di determinare lo slot successivo disponibile. Tieni presente che questo numero non è una garanzia della durata dell'appuntamento, ma aiuta a ridurre al minimo i tempi di attesa dei pazienti se utilizzano l'app per prenotare un appuntamento.
  • first_consultation_fee – Il compenso addebitato dal medico per una prima visita. Può sembrare poco importante, ma è molto importante per la funzione di ricerca; la tariffa è un criterio di filtro molto comune.
  • followup_consultation_fee – Molti medici fanno pagare meno per una visita di follow-up che per una consultazione iniziale. Questa colonna memorizza il costo della consulenza di follow-up.
  • street_address – L'indirizzo dell'OPD dell'ospedale o della clinica.
  • city , state e country –La città, lo stato e il paese in cui si trova l'ospedale o la clinica.
  • zip – Il codice postale in cui si trova la clinica o l'ospedale. Spesso le persone cercano medici nelle aree vicine utilizzando un codice postale, quindi questo campo sarà importante per la funzione di ricerca dell'app.

Perché esiste una tabella "ufficio" separata quando i dettagli OPD possono essere facilmente rintracciati nella tabella "affiliazione_ospedale"?

Tre motivi:

  • Un medico potrebbe essere affiliato a un ospedale per un aspetto del proprio lavoro (ad es. eseguire interventi chirurgici) ma non per altri (ad es. vedere pazienti che ricoverano). Potremmo perdere tali affiliazioni se tentiamo di mantenere i dettagli dell'ufficio nel hospital_affiliation solo tabella.
  • Molti medici non sono affiliati agli ospedali, ma hanno le proprie cliniche o studi. Dobbiamo archiviare le informazioni anche per questi medici.
  • Un medico può avere diversi studi in luoghi diversi o può lavorare in diverse filiali di un ospedale. Se il medico viene mostrato come affiliato a una sola sede ospedaliera, potremmo perdere alcune informazioni. Questo è il motivo per cui manteniamo i dettagli dell'indirizzo separati.

Il office_doctor_availability la tabella memorizza la disponibilità dell'OPD/ambulatorio dei medici in termini di fasce orarie (diciamo 2 ore al mattino e 4 ore alla sera). Dividere la giornata in questo modo è piuttosto comune, quindi avere un tavolo aggiuntivo per memorizzare gli slot di disponibilità ha senso. Inoltre, i medici possono lavorare più di un turno OPD. Le colonne di questa tabella sono:

  • id – La chiave primaria della tabella.
  • office_id – Fa riferimento alla tabella "ufficio".
  • day_of_week – Il giorno della settimana, ovvero lunedì, martedì, ecc. Ciò consente ai medici di avere disponibilità diverse per giorni diversi (fine settimana o giorni feriali, ad esempio).
  • start_time – Quando il medico è pronto per il primo paziente.
  • end_time – Quando è prevista la fine dell'ultimo appuntamento o turno.
  • is_available – Consente ai medici di contrassegnare la propria disponibilità per giorni o fasce orarie particolari. Questa colonna viene inizializzata con una "Y" come impostazione predefinita e viene aggiornata con una "N" quando i medici segnalano la loro indisponibilità.
  • reason_of_unavailablity – Molti medici preferiscono rivelare il motivo per cui non sono disponibili o devono annullare un appuntamento. Questo aiuta a costruire una relazione trasparente tra i medici ei loro pazienti. Poiché è facoltativo, l'ho mantenuto come colonna nullable.

Il in_network_insurance la tabella memorizza le informazioni sull'assicurazione. In molti paesi, i servizi medici sono molto costosi e l'assicurazione sanitaria è obbligatoria. In questi casi, questa tabella contiene i dettagli su quali compagnie assicurative sono pienamente accettate presso l'OPD dell'ospedale o la clinica.

Gestione dei dati dei clienti e delle recensioni

Per un paziente, la registrazione all'app richiede pochissime informazioni. Da qui in poi, userò "client" anziché "utente" o "paziente".

Il client_account la tabella memorizza i dettagli di base per i clienti. Questi dettagli vengono acquisiti al momento della registrazione. Le colonne di questa tabella sono:

  • id – Un numero univoco assegnato a ciascun cliente.
  • first_name – Il nome del cliente.
  • last_name – Il cognome del cliente.
  • contact_number – Il numero di telefono del cliente, preferibilmente un numero di cellulare, a cui inviare le informazioni sull'appuntamento. Questo è anche il numero a cui il cliente può essere contattato dal personale dello studio medico.
  • email – L'indirizzo email del cliente. L'app può inviare promemoria degli appuntamenti ai clienti.

Il client_review la tabella non solo offre feedback (cioè recensioni dei clienti) per i medici, ma aiuta anche i potenziali clienti a scegliere i medici. È parte integrante di questa app. Le colonne per questa tabella sono:

  • id – La chiave primaria di questa tabella.
  • user_account_id – Indica quale utente sta inviando la recensione.
  • doctor_id – Il medico in fase di revisione.
  • is_review_anonymous – Se il nome del cliente verrà pubblicato con la recensione o meno. Questa è una funzionalità di sicurezza per i clienti.
  • wait_time_rating – Questa colonna numerica ha una valutazione che va da 1 (peggiore) a 10 (migliore). Riflette l'opinione del cliente su quanto tempo ha aspettato per vedere il medico.
  • bedside_manner_rating –Memorizza l'opinione del cliente sul comportamento del medico al letto del paziente (cioè se il medico è gentile, compassionevole, comunica bene, ecc.)
  • overall_rating – Valutazione del cliente sulla sua esperienza generale con il medico.
  • review – I clienti possono fornire il loro feedback dettagliato qui.
  • is_doctor_recommended – Questa colonna indicatrice indica se il cliente raccomanderebbe il medico.
  • review_date – Quando è stata inviata la recensione.

Gestione degli appuntamenti

Questa sezione è il principale USP (Unique Selling Point) per questa app, in quanto consente ai clienti di verificare la disponibilità di vari medici e prenotare un appuntamento.

L'appointment la tabella contiene i dettagli dell'appuntamento per i clienti. Le sue colonne includono:

  • id – Ad ogni appuntamento viene assegnato un numero univoco. Questo numero è referenziato altrove.
  • user_account_id – Quale cliente sta prenotando l'appuntamento.
  • office_id – Indica quale medico e quale ospedale OPD o clinica è coinvolto nell'appuntamento.
  • probable_start_time – Questa è una colonna timestamp che contiene l'ora di inizio probabile dell'appuntamento. Gli orari di inizio delle visite mediche sono generalmente probabili piuttosto che assoluti.
  • actual_end_time – L'ora di fine effettiva della consultazione. Inizialmente questa colonna è vuota, poiché molti fattori possono influenzare la fine di un appuntamento. Pertanto, questa è una colonna nullable.
  • appointment_status_id – Questo è referenziato da appointment_status tabella e indica lo stato attuale dell'appuntamento. I valori possibili per lo stato sono "attivo", "cancellato" e "completo". Inizialmente lo stato sarebbe "attivo". Diventerebbe "completo" una volta terminato l'appuntamento. Diventerà "cancellato" se il cliente annulla l'appuntamento.
  • appointment_taken_date – La data in cui è stato fissato l'appuntamento.
  • app_booking_channel_id – Il canale attraverso il quale è stato prenotato un appuntamento. Esistono più canali attraverso i quali si prendono gli appuntamenti:tramite l'app, chiamando l'ospedale, chiamando il medico o il suo studio, ecc.

Vedi il modello di dati completo




La funzione di ricerca in azione

Cerchiamo un oculista nel CAP 63101. I risultati della ricerca devono essere ordinati in base ai seguenti criteri:

  • La maggior parte dell'esperienza
  • Valutazione consigliata dai clienti più alta
  • Commissione di consulenza iniziale più bassa

Ecco il codice:

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;

Cosa aggiungeresti?

Cos'altro può essere aggiunto a questa app e a questo modello di dati? Condividi le tue opinioni nei commenti.