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

Ein Datenmodell für eine App zur Buchung medizinischer Termine

Die Buchung eines Arzttermins über eine Online-App ist eine Innovation, die den gesamten Prozess vereinfacht. Lassen Sie uns in das Datenmodell hinter einer Terminbuchungs-App eintauchen.

Warum eine App verwenden? Es erleichtert den Menschen, den Arzt ihrer Wahl zu finden, indem sie die Berufsunterlagen und Patientenbewertungen des Arztes einsehen können. Wenn jemand einen Arzt findet, den er mag, kann er einen Termin mit ihm vereinbaren, ohne die App zu verlassen. Eine App kann Ärzten auch helfen, die Wartezeiten ihrer Patienten so kurz wie möglich zu halten, ihre Patienten zu planen und die Online-Bewertungen von Patienten im Auge zu behalten.

App-Anforderungen für Arzttermine

Kurz gesagt, wir erwarten, dass unsere App:

  • Ermöglichen Sie Patienten, Ärzte verschiedener Fachrichtungen (Hausarzt, Kardiologe, Podologe usw.) nach Standort zu suchen.
  • Zeigen Sie eine geordnete Liste von Ärzten basierend auf ihrer jahrelangen Erfahrung, ihrer Entfernung vom Aufenthaltsort des Patienten, ihren Patientenempfehlungen und ihren Bewertungsindizes (Gesamtbewertung der Patienten am Krankenbett, Wartezeit, Personal usw.)
  • Zeigen Sie die Erst- und Folgeberatungsgebühren der Ärzte an.
  • Erfassen und zeigen Sie die Profile von Ärzten, einschließlich Details zu ihren Abschlüssen, Zertifizierungen, Praktika und früheren und aktuellen Zugehörigkeiten zu Krankenhäusern.
  • Erfassen Sie Bewertungen über Ärzte von App-Nutzern. Diese Bewertung gibt anderen App-Benutzern eine gründliche Vorschau auf Ärzte und ihre Mitarbeiter.

Und vergessen Sie nicht das Alleinstellungsmerkmal der App:zeigt bevorstehende verfügbare Termine an und ermöglicht Benutzern, einen zu buchen .

App-Anforderungen kategorisieren

Grundsätzlich können wir die Anforderungen an die App in diese vier Bereiche einteilen:

  1. Verwaltung von Arztdaten – Ärzte können sich registrieren und alle ihre Daten eingeben.
  2. OPD (Ambulanz) und Klinikdetails von Ärzten verwalten – Ärzte (oder ihre Mitarbeiter) können Details zu ihrem Klinik- oder OPD-Zeitplan und ihrer Verfügbarkeit protokollieren.
  3. Kunden- und Bewertungsdaten verwalten – Benutzer können sich registrieren und ihre grundlegenden Daten eingeben. Sie können auch Rezensionen über Ärzte posten.
  4. Termine verwalten – Benutzer können nach bestimmten Kriterien nach Ärzten suchen.

Sehen wir uns diese Bereiche einzeln an.

Verwaltung von Arztdaten

Ärzte können sich bei der App registrieren, indem sie bestimmte obligatorische Angaben machen, aber die Terminbuchungsfunktion wird erst aktiviert, nachdem sie ihr vollständiges Profil ausgefüllt haben. Dazu gehören ihre Qualifikationen (berufliche Abschlüsse, Zertifizierungen/Spezialisierungen und Praktika) und ihre früheren und aktuellen Zugehörigkeiten zu Krankenhäusern und Gesundheitsdienstleistern.

Die unten gezeigten Tabellen verwalten diese Informationen.

Der doctor Tabelle speichert elementare Angaben zu Ärzten, die sie bei der Registrierung eingeben. Die Spalten in dieser Tabelle sind:

  • id – Eine eindeutige Nummer, die die App den Ärzten bei der Registrierung zuweist.
  • first_name – Vorname des Arztes.
  • last_name – Nachname des Arztes.
  • professional_statement – Eine detaillierte Übersicht über die Qualifikation, Erfahrung, das Berufsmotto usw. des Arztes. Diese Informationen werden vom Arzt eingegeben und auf der Profilseite jedes Arztes angezeigt.
  • practicing_from – Das Datum, an dem der Arzt mit der Ausübung der Medizin begonnen hat. Dies ist von großer Bedeutung, da die App ihre Erfahrungsbewertung für jeden Arzt basierend auf den Informationen in dieser Spalte ableitet.

Die specialization Tabelle enthält alle vorhandenen medizinischen Spezialisierungen wie Orthopädie, Neurologe, Zahnarzt usw. Ein Arzt kann mehr als eine Spezialisierung haben; Tatsächlich ist es ziemlich üblich, dass sich ein Arzt auf verwandte Bereiche spezialisiert. Beispielsweise kann ein Neurologe auch ein Psychiater sein; ein Gynäkologe kann ein Endokrinologe sein und so weiter. Daher die doctor_specialization Tabelle ermöglicht eine Viele-zu-Viele-Beziehung zwischen dem doctor und specialization Tische. Die Attribute in diesen beiden Tabellen sind selbsterklärend.

Die qualification Tabelle speichert Details über die Ausbildung und berufliche Qualifikation von Ärzten, einschließlich Abschlüssen, Zertifizierungen, Forschungsarbeiten, Seminaren, Weiterbildung usw. Um die verschiedenen Arten von Qualifikationsdetails zu vereinfachen, habe ich diesen Feldern recht allgemeine Namen gegeben:

  • id – Der Primärschlüssel der Tabelle.
  • doctor_id – Verweist auf den doctor Tabelle und verbindet den Arzt mit der Qualifikation.
  • qualification_name – Kennzeichnet den Namen des Abschlusses, der Zertifizierung, der Forschungsarbeit usw.
  • institute_name – Die Institution, die dem Arzt die Qualifikation ausgestellt hat. Dies kann eine Universität, eine medizinische Einrichtung, ein internationaler Ärzteverband usw. sein.
  • procurement_year – Das Datum, an dem die Qualifikation erworben oder verliehen wurde.

Die hospital_affiliation Die Tabelle enthält Informationen über die Zugehörigkeit von Ärzten zu Krankenhäusern und Gesundheitsdienstleistern. Diese Daten dienen nur der Anzeige im Arztprofil und haben keine Bedeutung für die Terminbuchungsfunktion. OPD-Details (Ambulanz) werden separat eingegeben und später in diesem Artikel behandelt.

Die Spalten dieser Tabelle sind:

  • id – Der Primärschlüssel der Tabelle.
  • doctor_id – Verweist auf den doctor Tabelle und verbindet den Arzt mit dem angeschlossenen Krankenhaus.
  • hospital_name – Name des angeschlossenen Krankenhauses.
  • city and country – Die Stadt und das Land, in dem sich das Krankenhaus befindet. Diese Adressspalten spielen in der Suchfunktion der App keine Rolle; Sie werden nur im Profil des Arztes angezeigt.
  • start_date – Beginn der Zugehörigkeit des Arztes zum Krankenhaus.
  • end_date – Bei Beendigung der Zugehörigkeit. Es ist nullable, da aktuelle Zugehörigkeiten kein Enddatum haben.

OPD/Klinikdetails des Arztes verwalten

Die Informationen in diesem Abschnitt werden von Ärzten (oder ihren Mitarbeitern) eingegeben und spielen eine wichtige Rolle bei den Such- und Buchungsfunktionen der App.

Das office Die Tabelle enthält Informationen über die Ambulanzen der Krankenhäuser, denen Ärzte angeschlossen sind, sowie über ihre eigenen Kliniken (z. B. Praxen oder Praxen). Die Spalten in dieser Tabelle sind:

  • id – Der Primärschlüssel dieser Tabelle.
  • doctor_id – Verweist auf den doctor Tabelle und gibt den zuständigen Arzt an.
  • hospital_affiliation_id – Bezeichnet das Krankenhaus, in dem der Arzt für OPD verfügbar ist. Da die Spalte auf OPDs, aber nicht auf Kliniken anwendbar ist, ist sie nullable.
  • time_slot_per_client_in_min – Speichert eine Zeit (in Minuten), die für Konsultationen vorgesehen ist. Die Anzahl der Minuten wird von Ärzten aufgrund ihrer Erfahrung eingegeben. Diese Spalte hilft der App, den nächsten verfügbaren Slot zu bestimmen. Beachten Sie, dass diese Nummer keine Garantie für die Dauer des Termins ist, aber hilft, die Wartezeiten der Patienten zu minimieren, wenn sie die App zum Buchen eines Termins verwenden.
  • first_consultation_fee – Das vom Arzt erhobene Honorar für einen Erstbesuch. Das mag unwichtig erscheinen, ist aber für die Suchfunktion sehr wichtig; Gebühr ist ein sehr häufiges Filterkriterium.
  • followup_consultation_fee – Viele Ärzte verlangen für einen Folgebesuch weniger als für ein Erstgespräch. In dieser Spalte werden die Folgeberatungskosten gespeichert.
  • street_address – Die Adresse des OPD oder der Klinik des Krankenhauses.
  • city , state und country –Die Stadt, das Bundesland und das Land, in dem sich das Krankenhaus oder die Klinik befindet.
  • zip – Die Postleitzahl, in der sich die Klinik oder das Krankenhaus befindet. Ärzte in der näheren Umgebung werden oft über die Postleitzahl gesucht, daher ist dieses Feld für die Suchfunktion der App wichtig.

Warum gibt es eine separate „Büro“-Tabelle, wenn OPD-Details einfach in der „Hospital_Affiliation“-Tabelle nachverfolgt werden können?

Drei Gründe:

  • Ein Arzt kann einem Krankenhaus für einen Aspekt seiner Arbeit angegliedert sein (d. h. Operationen durchführen), aber nicht für andere (d. h. Patienten ambulant behandeln). Wir können solche Zugehörigkeiten verlieren, wenn wir versuchen, Bürodetails in hospital_affiliation nur Tabelle.
  • Viele Ärzte sind nicht an Krankenhäuser angeschlossen, sondern haben eigene Kliniken oder Praxen. Auch für diese Ärzte müssen wir Informationen speichern.
  • Ein Arzt kann mehrere Praxen an verschiedenen Standorten haben oder in mehreren Zweigstellen eines Krankenhauses arbeiten. Wenn der Arzt nur als mit einem Krankenhausstandort verbunden angezeigt wird, können einige Informationen verloren gehen. Aus diesem Grund führen wir gesonderte Adressdaten.

Die office_doctor_availability Die Tabelle speichert die OPD/Klinikverfügbarkeit der Ärzte in Zeitfenstern (z. B. 2 Stunden morgens und 4 Stunden abends). Eine Aufteilung des Tages auf diese Weise ist ziemlich üblich, daher ist es sinnvoll, eine zusätzliche Tabelle zum Speichern von Verfügbarkeitsslots zu haben. Außerdem können Ärzte mehr als eine OPD-Schicht arbeiten. Die Spalten für diese Tabelle sind:

  • id – Der Primärschlüssel der Tabelle.
  • office_id – Verweist auf die „office“-Tabelle.
  • day_of_week – Der Wochentag, d. h. Montag, Dienstag usw. Dadurch können Ärzte unterschiedliche Verfügbarkeiten für verschiedene Tage haben (z. B. Wochenende vs. Wochentage).
  • start_time – Wenn der Arzt für den ersten Patienten bereit ist.
  • end_time – Wann der letzte Termin oder die letzte Schicht enden soll.
  • is_available – Ermöglicht Ärzten, ihre Verfügbarkeit für bestimmte Tage oder Zeitfenster zu markieren. Diese Spalte ist standardmäßig mit einem „Y“ initialisiert und wird auf ein „N“ aktualisiert, wenn Ärzte ihre Nichtverfügbarkeit markieren.
  • reason_of_unavailablity – Viele Ärzte legen lieber offen, warum sie nicht erreichbar sind oder einen Termin absagen müssen. Dies trägt dazu bei, eine transparente Beziehung zwischen Ärzten und ihren Patienten aufzubauen. Da es optional ist, habe ich dies als nullable-Spalte beibehalten.

Der in_network_insurance Tabelle speichert Versicherungsinformationen. In vielen Ländern sind medizinische Leistungen sehr kostspielig und eine Krankenversicherung ist obligatorisch. In solchen Fällen enthält diese Tabelle die Details darüber, welche Versicherungsgesellschaften im OPD oder in der Klinik des Krankenhauses vollständig akzeptiert werden.

Kunden- und Bewertungsdaten verwalten

Für einen Patienten erfordert die Registrierung für die App nur sehr wenige Informationen. Ab hier verwende ich „Kunde“ statt „Benutzer“ oder „Patient“.

Das client_account Tabelle speichert grundlegende Details für Kunden. Diese Daten werden zum Zeitpunkt der Registrierung erfasst. Die Spalten in dieser Tabelle sind:

  • id – Eine eindeutige Nummer, die jedem Kunden zugewiesen wird.
  • first_name – Vorname des Kunden.
  • last_name – Nachname des Kunden.
  • contact_number – Die Telefonnummer des Kunden, vorzugsweise eine Handynummer, an die Termininformationen gesendet werden können. Dies ist auch die Nummer, unter der der Klient von den Mitarbeitern der Arztpraxis kontaktiert werden kann.
  • email – Die E-Mail-Adresse des Kunden. Die App kann Terminerinnerungen an Kunden senden.

Der client_review table bietet nicht nur Feedback (d. h. Kundenbewertungen) für Ärzte, sondern hilft potenziellen Kunden auch bei der Auswahl des Arztes. Es ist ein integraler Bestandteil dieser App. Spalten für diese Tabelle sind:

  • id – Der Primärschlüssel dieser Tabelle.
  • user_account_id – Gibt an, welcher Benutzer die Bewertung abgibt.
  • doctor_id – Der begutachtete Arzt.
  • is_review_anonymous – Ob der Name des Kunden mit der Bewertung veröffentlicht wird oder nicht. Dies ist eine Sicherheitsfunktion für Clients.
  • wait_time_rating – Diese Zahlenspalte enthält eine Bewertung von 1 (am schlechtesten) bis 10 (am besten). Es spiegelt die Meinung des Kunden wider, wie lange er auf den Arztbesuch gewartet hat.
  • bedside_manner_rating –Speichert die Meinung des Patienten über die Art und Weise, wie der Arzt am Krankenbett vorgeht (z. B. ob der Arzt freundlich, mitfühlend ist, gut kommuniziert usw.)
  • overall_rating – Kundenbewertung ihrer allgemeinen Erfahrung mit dem Arzt.
  • review – Kunden können hier ihr detailliertes Feedback geben.
  • is_doctor_recommended – Diese Indikatorsäule gibt an, ob der Kunde den Arzt weiterempfehlen würde.
  • review_date – Wann die Bewertung abgegeben wurde.

Termine verwalten

Dieser Abschnitt ist das wichtigste USP (Unique Selling Point) für diese App, da Kunden die Verfügbarkeit verschiedener Ärzte prüfen und einen Termin buchen können.

Der appointment Tabelle enthält Termindetails für Kunden. Seine Spalten umfassen:

  • id – Jedem Termin ist eine eindeutige Nummer zugeordnet. Auf diese Nummer wird an anderer Stelle verwiesen.
  • user_account_id – Welcher Kunde bucht den Termin.
  • office_id – Gibt an, welcher Arzt und welches Krankenhaus OPD oder Klinik an dem Termin beteiligt ist.
  • probable_start_time – Dies ist eine Zeitstempelspalte, die die voraussichtliche Startzeit des Termins enthält. Die Beginnzeiten von Arztterminen sind in der Regel eher wahrscheinlich als absolut.
  • actual_end_time – Die tatsächliche Endzeit der Konsultation. Anfangs ist diese Spalte leer, da viele Faktoren das Ende eines Termins beeinflussen können. Daher ist dies eine Spalte, die Nullwerte zulässt.
  • appointment_status_id – Darauf wird vom appointment_status Tabelle und zeigt den aktuellen Status des Termins an. Mögliche Werte für den Status sind „aktiv“, „storniert“ und „abgeschlossen“. Anfangs wäre der Status „aktiv“. Es würde „vollständig“ werden, sobald der Termin erledigt ist. Es wird „storniert“, wenn der Kunde seinen Termin absagt.
  • appointment_taken_date – Das Datum, an dem der Termin vereinbart wurde.
  • app_booking_channel_id – Der Kanal, über den ein Termin gebucht wurde. Es gibt mehrere Kanäle, über die Termine vereinbart werden:über die App, durch Anruf im Krankenhaus, durch Anruf beim Arzt oder in der Praxis usw.

Siehe das vollständige Datenmodell




Die Suchfunktion in Aktion

Lassen Sie uns in der Postleitzahl 63101 nach einem Augenarzt suchen. Suchergebnisse sollten nach den folgenden Kriterien sortiert werden:

  • Die meiste Erfahrung
  • Höchste Kundenempfehlungsbewertung
  • Niedrigste Erstberatungsgebühr

Hier ist der Code:

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;

Was würden Sie hinzufügen?

Was kann dieser App und diesem Datenmodell noch hinzugefügt werden? Teilen Sie Ihre Ansichten in den Kommentaren.