Ik heb een lied geschreven over flosdraad, maar zijn de tanden van iemand schoner geworden?
Frank Zappa
Als we aan de tandartspraktijk denken, zijn onze eerste associaties de boor, de pijn en de angst. Oké, dat klinkt slecht. Naast het verzorgen van het gebit, heeft een tandarts vele andere verplichtingen die professioneel, wettelijk of beide zijn. Ze vereisen allemaal goed gegevensbeheer.
Om aan deze documentatievereiste te voldoen, gebruiken veel tandheelkundige en medische kantoren papieren dossiers. Maar langzaam maar zeker is er een trend naar de digitale administratie en het beheer van de 21e eeuw.
In het kantoor van tandheelkundige geneeskunde
Naar de tandarts gaan is niet iets waar we normaal met plezier aan terugdenken. Als we geluk hadden, ontweken we de pijn, maar onze portemonnee heeft waarschijnlijk zwaar geleden. Nadat we een tandartspraktijk zijn binnengegaan, is de procedure meestal als volgt:
- Jullie houden allebei een kort praatje. (Vaak onaangenaam omdat je je tandarts hebt beloofd hem volgende week te bezoeken en er zijn 2 jaar verstreken. Dan zeg je dat je het vergeten bent, hij stemt toe, en alles is weer in orde.)
- U zit op de stoel terwijl hij uw eerdere behandelgegevens bekijkt. Hij vraagt of er iets is gebeurd sinds het laatste bezoek en of er een update is in uw medisch dossier.
- Hij kijkt in je mond om te bepalen wat er mis is gegaan en vertelt je wat het zal oplossen.
- U kunt akkoord gaan met zijn behandelplan of een andere optie kiezen.
- Een paar maanden later staat er weer een Hollywood-glimlach op je gezicht. Het zou eerder zijn geweest, maar je kon pas glimlachen als je eindelijk de rekening voor je tandheelkundige werk volledig had betaald.
Op dit moment denkt zelfs de meest toegewijde databaseprofessional waarschijnlijk niet:'Wauw, ik wou dat er een datamodel was voor deze ervaring!' . Maar er is, en het is het onderzoeken waard. Daarom hebben we het hieronder afgedrukt.
Introductie van ons databasemodel voor tandartspraktijken
Het idee achter dit model is om elke procedure te dekken vanaf het moment dat we voor het eerst de tandartspraktijk binnenstappen totdat het probleem is opgelost. Onderdeel van dit model (de tabellen met het label user_account
, status
, user_has_status
, role
, user_has_role
) werd gepresenteerd en beschreven in eerdere artikelen. Misschien lijken rollen en statussen hier overbodig, maar onthoud dat de praktijk ook een verpleegkundige kan bevatten om de anamnese af te handelen, een receptioniste, een tandheelkundestudent, verschillende opgeleide tandartsassistenten, of zelfs een bezoekende specialist of een hygiënist. In dit artikel wordt echter geen rekening gehouden met betalingsgegevens.
Tabellen in de tandheelkundige database
De patient
table is een van de twee belangrijkste tabellen in de database. Het slaat patiëntengegevens op en is gekoppeld aan patiëntendocumenten en bezoeken. Met uitzondering van mail
, alle attributen in de tabel zijn verplicht:
name
– de naam van de patiëntsurname
– de achternaam van de patiëntidentification_number
- dit veld wordt gebruikt om de unieke id van een klant op te slaan die in de echte wereld wordt gebruiktaddress
– het adres van de patiëntphone
– het telefoonnummer van de patiëntmail
– het e-mailadres van de patiënt
De op één na belangrijkste tabel in de database is visit
. In combinatie met de tabel patient
, slaat het informatie op over de gebeurtenis die alle volgende acties heeft geactiveerd. De attributen in de tabel zijn:
visit_date
- bevat de werkelijke datum en tijd waarop het bezoek heeft plaatsgevondenpatient_id
– is het ID van de patiënt gerelateerd aan zijn bezoekdentist_id
– is een verwijzing naaruser_has_role
tafel, ervan uitgaande dat de rol tandarts is
De volgende is de anamnesis
tafel. In de geneeskunde is anamnese een procedure waarbij we de geschiedenis van medische gegevens verzamelen en opslaan, zoals de huidige toestand van de patiënt. De anamnesis
tabel slaat deze gegevens op. Aangezien dit snel na onze aankomst op kantoor gebeurt, hebben we maximaal één anamnese per gebeurtenis. De attributen in de tabel zijn:
anamnesis_id
– is de primaire sleutel van deanamnesis
tabel, die ook verwijst naar devisit
tafeluser_anamnesis_id
– dit heeft betrekking op deuser_has_role
tafel. Merk op dat de tandarts niet degene hoeft te zijn die de anamnese heeft gemaakt.notes
– bevat tekstnotities over specifieke anamnese. Het is geen verplicht veld.
De anamnesis_type
tabel is een eenvoudig woordenboek dat wordt gebruikt om alle mogelijke waarden op te slaan waarnaar wordt verwezen in anamnesis_catalog
. Het enige kenmerk is type_name
, en het kan waarden bevatten zoals "ziekte", "allergie", "gebruikte medicijnen". Natuurlijk is dat enige kenmerk verplicht.
De anamnesis_catalog
tabel is een woordenboek dat meer specifieke informatie geeft dan de waarden die zijn opgeslagen in het anamnesis_type
tafel. We gebruiken het om gegevens over specifieke ziekten, allergieën en medicijnen bij te houden. De attributen zijn allemaal verplicht en omvatten:
catalog_name
– is de naam van een specifiekanamnesis_type
subcategorieanamnesis_type_id
– is een verwijzing naar hetanamnesis_type
tafel
De visit_anamnesis
tabel wordt gebruikt om bezoekgegevens te koppelen aan waarden uit de anamnesecatalogus. Elk attribuut in de tabel is vereist:
anamnesis_anamnesis_id
– is een verwijzing naar deanamnesis
tafelanamnesis_catalog_id
– is een verwijzing naar deanamnesis_catalog
tafel
Merk op dat de visit_anamnesis
tabel is een veel-op-veel-relatie die de tabellen met het label anamnesis
en anamnesis_catalog
. Het heeft geen zin om dit paar op te slaan (anamnesis_anamnesis_id
&anamnesis_catalog_id
) tweemaal. We gebruiken dat paar als de primaire sleutel.
Het document
table is een eenvoudige catalogus met locaties waar we patiëntendocumenten hebben opgeslagen. Voorbeelden van dergelijke documenten zijn scans van patiëntenkaarten, röntgenfoto's en facturen. Uiteraard slaan we deze documenten niet direct op in de database. Dit is een grove vereenvoudiging van het documentbeheersysteem. De attributen in het document
tabel zijn (allemaal verplicht):
description
– is een korte documentbeschrijvinglocation
– bevat de exacte documentlocatiepatient_id
– is een verwijzing naar depatient
tafel
De tooth
table is een eenvoudig woordenboek dat later wordt gebruikt wanneer de tandarts aangeeft welke tand het probleem was. Alle attributen in deze tabel zijn vereist. Dit zijn:
is_baby_tooth
– is een Booleaanse waarde die eenvoudig aangeeft of een tand een melktand is of niet. Natuurlijk hebben we dubbele waarden voor tanden die beide kunnen zijn. Dit is belangrijk omdat een procedure per tandtype kan verschillen.tooth
– is een beschrijving die wordt gebruikt voor de tand waarmee werk wordt gedaan – over het algemeen wordt die waarde op het scherm weergegeven.
De problem_catalog
tabel is een ander eenvoudig woordenboek. Het bevat een lijst van alle mogelijke problemen die normaal gesproken op tanden of in de mond voorkomen. Voorbeelden van mogelijke waarden voor deze catalogus zijn:“tandbederf”, “tanderosie”, “gingivitis”, “zweertjes in de mond” of “onaantrekkelijke glimlach”. Alleen de problem_name
kenmerk is verplicht.
De problem_detected
tabel verbindt bezoek-, tand- en probleemcatalogusgegevens met de treatment
tafel. Het bevat verwijzingen naar de tooth
, problem_catalog
en visit
tafels. Alle attributen zijn verplicht behalve tooth_id
. De reden voor deze uitzondering is dat sommige problemen niet naar slechts één tand verwijzen (bijv. gingivitis verwijst naar het tandvlees). Deze drie attributen vormen samen een alternatieve sleutel (UNIEK). De andere twee kenmerken zijn:
suggested_treatment_id
is een verwijzing naar detreatment
tafel (de behandeling voorgesteld door de tandarts). Het kan een NULL-waarde zijn als alles in orde is en we geen behandeling nodig hebben.selected_treatment_id
is een andere verwijzing naar detreatment
tafel. Het bevat gegevens over de behandeling die tandarts en patiënt zijn overeengekomen. Dit kan NULL zijn, misschien omdat de patiënt tijd nodig heeft om na te denken over de voorgestelde behandeling en andere mogelijkheden.
Merk op dat de attributen suggested_treatment_id
en selected_treatment_id
beide verwijzen naar de treatment
tafel. We kunnen dit doen omdat we maximaal twee waarden hoeven op te slaan. Als we niet van tevoren weten hoeveel waarden we willen opslaan, moeten we hier natuurlijk een veel-op-veel-relatie gebruiken.
De step
tabel is een eenvoudig woordenboek met alle mogelijke stappen in alle behandelingen. De attributen (allemaal verplicht) in de tabel zijn:
step_name
– is een korte stapnaam die op het scherm wordt gebruiktdescription
– is een beschrijving van de acties die tijdens deze stap zijn ondernomen
De treatment
tabel is in feite een woordenboek van alle behandelingen die de tandartspraktijk biedt. Aangezien de meeste behandelingen meestal uit meerdere stappen bestaan, moeten we weten welke stap definitief is. De attributen in de tabel zijn allemaal vereist:
treatment_name
– is de naam van de behandeling binnen het systeemdescription
– is een korte beschrijving van de behandelingfinal_step_id
– is een verwijzing naar destep
tafel. We kunnen deze informatie gebruiken om te detecteren of de behandeling voorbij is en automatische actie te starten, of we kunnen die informatie eenvoudig aan de gebruiker laten zien en hem de volgende actie laten kiezen.
De treatment_steps
tabel is een veel-op-veel relatie die stappen verbindt met behandelingen. De verplichte attributen in de tabel zijn:
treatment_id
– is een verwijzing naar detreatment
tafelstep_id
– is een verwijzing naar destep
tafelstep_order
– is een getal dat de volgorde van de stappen in de behandeling bepaalt
In deze tabel zijn twee alternatieve sleutels (UNIEK) gedefinieerd:
- paar (
treatment_id
&step_id
) – deze stap kan slechts één keer aan de behandeling worden toegewezen - paar (
treatment_id
&step_order
) – de behandeling mag geen twee stappen hebben met hetzelfde bestelnummer
De visit_steps
tabel is een lijst van alle stappen die daadwerkelijk zijn uitgevoerd na dat bezoek. Er zijn twee redenen waarom we ze in aparte tabellen willen opslaan:
- We hebben misschien een behandeling gekozen, maar we hebben niet alle stappen nodig die ervoor zijn gedefinieerd, en
- Op deze manier slaan we de werkelijke tijd op waarop de stap werd uitgevoerd.
De attributen in de tabel (allemaal verplicht behalve problem_detected_id
en notes
) zijn als volgt:
visit_id
– is een verwijzing naar devisit
tafeltreatment_steps_id
– is een verwijzing naar detreatment_steps
tafelproblem_detected_id
– is een verwijzing naar deproblem_detected
tafel. Deze relatie geeft ons informatie over welk probleem de actie heeft veroorzaakt. Het kan NULL zijn wanneer de tandarts besluit een actie te ondernemen die geen verband houdt met een gedetecteerd probleem.step_time
– is de datum en/of tijd waarop de stap daadwerkelijk is uitgevoerdnotes
– zijn notities voor die stap, indien nodig
De visit_status
table is een eenvoudig woordenboek dat wordt gebruikt om alle mogelijke statussen van een bezoek op te slaan. We kunnen statussen gebruiken zoals "eerste bezoek aan kantoor ooit", "eerste bezoek", "behandeling in uitvoering", "behandeling succesvol afgerond". Het bevat slechts één attribuut, status_name
, wat verplicht is.
De visit_status_history
tabel wordt gebruikt om gegevens op te slaan over de statussen die het bezoek heeft doorgemaakt. De gedachte is dat we de status handmatig toevoegen nadat bepaalde acties zijn voltooid (bijvoorbeeld na anamnese, na het voltooien van een paar stappen van een behandeling). De attributen, die allemaal vereist zijn, volgen:
status_time
– is de datum/tijd waarop de status werd ingevoegdvisit_status_id
– is een verwijzing naar devisit_status
tafelvisit_id
– is een verwijzing naar devisit
tafel
Mogelijke verbeteringen aan het tandheelkundige databasemodel
Ons model is goed van start gegaan, maar het kan voor verbetering vatbaar zijn. Het dekt bijvoorbeeld niet de volgende items:
- betaalmethoden en facturen
- vergaderingen plannen (hoewel dit kan worden gedaan door gegevens in te voeren in de
visit_steps
tabel voor toekomstige evenementen) - documentafhandeling
Toch laat het je anders denken over je tandartspraktijk en de procedures, nietwaar?