Celkom prirodzeným procesom v modernom svete plnom elektronických zariadení uľahčujúcich komunikáciu a poskytujúcich prístup k nesmiernemu množstvu údajov na jednom mieste je integrácia informačných systémov do širokého spektra odveví.
Jedným z príkladov sú aj sytémy elektronického zdravotníctva, vďaka ktorým môžu lekári pohodlnejšie interagovať či už medzi sebou, s pacientami alebo lekárnikmi, avšak aj napriek výhodám tejto aplikácie novodobých technológií je v súčasnosti stále možné badať ich nedostatočné využitie.
Práve z tohto dôvodu sme sa rozhodli vytvoriť zjednodušenú verziu systému prepájajúceho ľudí spomínaných troch základných rolí v oblasti zdravotníctva z pohľadu bežného občana.
V tejto práci sa budeme zameriavať na vývoj aplikácie umožňujúcej evidenciu zdravotnej dokumentácie pacienta, jej modifikáciu lekárom a výdaj liekov lekárnikmi na základe predpisov.
Cieľom nášho projektu bude preto najprv navrhnúť vhodnú schému databázového systému potrebného na uchovávanie informácií, ktoré sú súčasťou zdravotnej knižky.
Po predstavení nášho modelu, súčasťou čoho bude aj detailnejšia špecifikácia aplikácie, podrobnejšie opíšeme spôsob implementácie, ako aj zvolenú formu používateľského rozhrania, ozrejmíme priebeh vývoja aplikácie a na záver zhodnotíme dosiahnuté výsledky.
Návrh dátového modelu
Návrh dátového modelu prešiel v priebehu tvorby aplikácie viacerými zmenami, avšak jeho finálnu podobu v UML notácii poskytujeme nižšie na Obr. 1.
Entitno-relačný model systému elektronického zdravotníctva
Tento entitno-relačný model sme tiež následne pretransformovali na relačný dátovy model, ktorý je vyobrazený na Obr. 2.
Keďže je však entitno-relačný model na Obr. 1 značne prehľadnejší a zároveň zachytáva väčšinu detailov štruktúry vytvoreného systému, budeme pri opisovaní nášho návrhu vychádzať najmä z neho.
Relačný dátový model systému elektronického zdravotníctva
Najskôr sa dôkladnejšie pozrieme na množinu users a súčasne s ňou úzko spätú množinu credentials.
V množine users sa uchovávajú výlučne osobné údaje používateľov umožňujúce predovšetkým vyhľadávanie osoby v systéme, zatiaľ čo v množine credentials si pre každého používateľa ukladáme informácie nevyhnutné na jeho autentifikáciu.
Pri pohľade na množinu credentials je potrebné ozrejmiť, že overovanie identity bude prebiehať v dvoch fázach, čiže po zadaní správneho používateľského mena (login) a hesla (password) bude používateľ požiadaný o uvedenie čísla nachádzajúceho sa na náhodne určených pozíciách mriežky (grid) vygenerovanej v priebehu registrácie.
Keďže v systéme musíme rozlišovať dovedna tri skupiny používateľov, konkrétne lekárov, lekárnikov a pacientov, pre každú z nich sme ďalej v množine users vyčlenili samostatnú podmnožinu, a to doctors, pharmacists a patients, pričom v podmnožine patients sa uchovávajú i ďalšie osobné údaje o pacientoch.
Pri modelovaní týchto vzťahov medzi množinou users a jej podmnožinami sme počas transformácie entitno-relačného modelu na relačný dátovy model využili princíp Class Table Inheritance, v dôsledku čoho možno jednak realizovať zmienené vyhľadávanie osoby jedným prístupom do tabuľky users a jednak skrz integritné obmedzenia zaručiť, že niektoré akcie budú smieť vykonávať iba lekári či lekárnici.
Teraz sa bližšie pozrieme na systém z pohľadu používateľov v jednotlivých rolách. Každý lekár z množiny doctors má k dispozícii zoznam svojich aktuálnych pacientov, čo zabezpečuje priamy vzťah medzi množinou doctors a patients.
Informácie o všetkých vyšetreniach, ktoré daný lekár vykonal a príslušný pacient podstúpil, sa v systéme nachádzajú v množine checkups.
Po zaznamenaní vyšetrenia môže následne lekár na základe neho pacientovi určiť diagnózu (táto skutočnosť sa ukladá v množine patient_diagnoses) a stanoviť predpokladaný dátum vyliečenia z nej (suffered_until), ktorý je však možné doplniť aj dodatočne alebo v prípade chronických ochorení (chronic) neuviesť vôbec.
Všetky známe diagnózy, z ktorých lekár pri diagnostike vyberá, sú zahrnuté v množine diagnoses.
S cieľom liečiť aktuálne diagnózy pacienta (z množiny patient_diagnoses) môže ďalej lekár vydávať predpisy (množina prescriptions) na lieky (množina drugs), ktoré ich liečia.
Každý predpis z množiny prescriptions je pritom vydaný pre jeden konkrétny liek v danom množstve (amount) s vhodne nastaveným dávkovaním (dosage) za účelom liečenia jednej pacientovej diagnózy.
Pri predpisovaní receptov je tiež systém lekárovi nápomocný v tom, že výber liekov sa obmedzuje iba na tie neobsahujúce účinné látky (z množiny active_ingredients), na ktoré je pacient alergický.
Po vyššie opísanej interakcii s lekárom si môže pacient predpísané lieky vybrať v ním zvolenej lekárni, kde mu ich na základe receptu vydá lekárnik z množiny pharmacists.
Záznam o tomto úkone je uchovaný v množine dispensed_drugs, pričom jeho súčasťou je aj informácia o tom, ktorý liek (v lekárom stanovenom množstve) bol skutočne vydaný, pretože pacient sa môže z rozličných dôvodov rozhodnúť pre výber iného, no alternatívneho lieku.
Samotnému pacientovi systém okrem sprostredkovania komunikácie medzi ním, lekárom a lekárnikom ponúka aj možnosť nahliadnuť do svojej zdravotnej dokumentácie vrátane predpísaných receptov na lieky, vďaka čomu sú mu dostupné všetky relevantné informácie o jeho zdravotnom stave.
Pacient má taktiež do istej miery kontrolu nad tým, kto má k jeho zdravotnej knižke prístup.
Prv, než ju lekár môže otvoriť, je totiž potrebné, aby pacientovi zaslal žiadosť o povolenie, po udelení ktorého ho následne môže zaradiť do svojho zoznamu aktuálnych pacientov (nastavením cudzieho kľúča doctor_id v tabuľke patients z relačného modelu na Obr. 2).
Rovnako musí o prístup požiadať i lekárnik, lenže tomu sa po kladnej odpovedi sprístupnia iba ešte nevybraté a neprepadnuté predpisy na lieky (pre každý predpis z množiny prescriptions sa jeho stav ukladá v atribúte dispensed a platnosť v atribúte valid_until).
Rozdielom je aj to, že lekár po zaradení pacienta do svojho zoznamu už ďalej o prístup žiadať nemusí, no lekárnik je povinný poslať žiadosť vždy.
Všetky tieto žiadosti sa uchovávajú v množine permission_requests, pričom pre každú z nich sa okrem adresáta a žiadateľa uchováva i stav (status) a dátum a čas, do kedy je ju nutné potvrdiť (valid_until).
Značnú časť obsahu tejto sekcie sme čerpali z dokumentu vytvoreného pre účely predmetu Databázy (2).
Implementácia
Používateľské rozhranie
Vzhľadom na komplexnosť celého projektu sme si zvolili konzolovú formu používateľského rozhrania.
Technické detaily
Databázový systém sme sa rozhodli, aj na základe našich predošlých skúseností, zrealizovať za pomoci PostgreSQL.
Logiku celej aplikácie sme následne implementovali v jazyku Java, využívajúc JDBC API na komunikáciu s databázovým serverom.
Zdrojový kód, ktorý je možné si stiahnuť po kilknutí na príslušný odkaz v menu (heslo vieme sprístupniť na požiadanie), sme za účelom zachovania prehľadnosti rozčlenili do troch častí: kód priamo pristupujúci do databázy (balíčky rdg, ts a util.db), kód zabezpečujúci autentifikáciu (balíček auth) a kód manažujúci interakciu s používateľom (balíček ui).
Čiastočná dokumentácia jednotlivých tried a metód sa nachádza na osobitnej podstránke.
Priebeh vývoja
Marec 2022
Návrh dátového modelu
Prvá verzia dátového modelu bola vytvorená a zaslaná vedúcemu projektu na posúdenie.
Zapracovanie pripomienok do návrhu dátového modelu
Dátový model bol mierne pozmenený a zjednodušený na základe spätnej väzby od vedúceho projektu.
Príprava databázového servera
Vychádzajúc z vypracovaného dátového modelu, v systéme PostgreSQL boli zadefinované schémy príslušných relácií, ako aj vzťahy medzi nimi. Jednotlivé tabuľky boli naplnené náhodne vygenerovanými dátami.
Apríl 2022
Autentifikácia používateľa
Všetky komponenty zabezpečujúce prihlasovanie už registrovaného používateľa boli implementované.
Pacientovi je po prihlásení umožnený prístup k záznamom o predošlých vyšetreniach, zistených alergiách, diagnostikovaných ochoreniach a predpisoch na lieky. Takisto je mu dovolené modifikovať vybrané osobné údaje nachádzajúce sa v jeho zdravotnej knižke.
Zakomponovanie základných akcií vykonávaných lekármi
Prihlásený lekár si môže v aplikácii zaevidovať nového pacienta po jeho súhlase. Následne sú lekárovi sprístupnené informácie zo zdravotnej knižky pacienta a je mu umožnené meniť zoznam jeho aktívnych alergií. Lekári si tiež môžu prezerať štatistiky zdravotníckych úkonov všetkých lekárov v rámci zvoleného obdobia.
Konzultácia k doterajším výsledkom práce
Vedúcemu projektu bol odprezentovaný progres vo vývoji aplikácie, na základe čoho sme obdržali ďalšie usmernenia.
Implementácia zostávajúcich operácií pre používateľov v roli lekára
Lekárom je dovolené pridávať a modifikovať záznamy o vyšetreniach a diagnostikovaných ochoreniach ich pacientov, ktorým môžu i vydávať predpisy na lieky za účelom liečby ich aktívnych diagnóz. Zároveň majú lekári prístup k štatistikám o predpisovaných liekoch pre jednotlivé ochorenia v stanovenom období.
Vývoj sekcie určenej pre lekárnikov
Lekárnikom je po prihlásení umožnené vydávať lieky na aktívne predpisy v pacientovej zdravotnej knižke, ktoré sú im zobrazené po získaní potrebného povolenia od príslušného pacienta.
Máj 2022
Registrácia a manažment konta
Vyplnením registračného formulára si môže nový používateľ - pacient, lekár alebo lekárnik - založiť účet v aplikácii. Zadané kontaktné údaje a prihlasovacie heslo je mu dovolené neskôr zmeniť.
Finalizácia projektu a záverečná prezentácia
Posledné úpravy týkajúce sa organizácie a optimalizácie kódu boli vykonané a výsledná práca bola odprezentovaná vedúcemu projektu.
Výsledky práce a zhodnotenie
Našou úlohou bolo vytvoriť systém umožňujúci a uľahčujúci interakciu medzi všeobecným lekárom, jeho pacientami a lekárnikmi s dôrazom na pohodlnosť prístupu k zdravotnej dokumentácii nielen pre ošetrujúceho lekára, ale aj pre daného pacienta.
Tento vytýčený cieľ sa nám pri práci na tomto projekte podarilo splniť.
Jedným zo zásadných vylepšení v prípade ďalšieho vývoja by však celkom určite bolo pridanie prívetivejšieho používateľskeho prostredia, ktoré by využívanie aplikácie spríjemnilo.
Taktiež by sme si perspektívne vedeli predstaviť i rozšírenie systému o podrobnejšiu kategorizáciu lekárov, čím by sme zároveň poskytli nástroj na zdielanie informácií o zdravotnom stave pacienta jednak medzi špecialistami a všeobecnými lekármi a jednak medzi špecialistami navzájom.