ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická
BAKALÁŘSKÁ PRÁCE
2007
Martin KUČERA
ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická Katedra výpočetní techniky
BAKALÁŘSKÁ PRÁCE (X36BAP)
Informační system zubního lékaře
2007
Martin Kučera
Vedoucí bakalářské práce: Ing. Kamil Matoušek, Ph.D. Oponent práce: MUDr. Miloslav Vojíř, CSc.
(zadání)
Prohlášení
Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady (literaturu, projekty, SW apod.) uvedené v přiloženém seznamu na konci práce.
Z důvodu možnosti budoucího komerčního využití software odpírám udělit souhlas s užitím tohoto školního díla ve smyslu § 60 Zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon).
V Praze dne 20.8.2007
………………………... podpis
1
Poděkování
Rád bych na tomto místě poděkoval Ing. Kamilu Matouškovi, Ph.D. za trpělivé vedení bakalářské práce a inspiraci pro využití programovacího jazyka C# a vývojového prostředí MS Visual Studio 2005 Express Edition.
Dále chci vyjádřit poděkování MUDr. Miloslavu Vojířovi, CSc. za pravidelné konzultace, odborné rady, poskytnutí podkladů a znalostí, které vedli k úspěsnému dokončení projektu.
2
Název práce: Informační systém zubního lékaře Autor: Martin Kučera Katedra: Katedra výpočetní techniky Vedoucí bakalářské práce: Ing. Kamil Matoušek, Ph.D. E-mail vedoucího:
[email protected] Oponent: MUDr. Miloslav Vojíř, CSc.
Abstrakt: Práce se zabývá návrhem a implementací aplikace pro podporu činnosti praktického zubního lékaře. Analyzuje prostředí zubařské praxe, seznamuje s nutnými záznamy, které musí zubní lékař uchovávat o návštěvách pacientů a pacientech samotných. V závislosti na požadavcích reálného prostředí zubní ordinace a zajištění jejího bezproblémového chodu, definuje datové struktury a grafické uživatelské prostředí (GUI). Výsledkem projektu je vytvoření stabilního jádra fungujícího systému, který bude v budoucnu dale rozšiřován tak, aby mohl být používán v zubních ordinacíh.
Title: Dentist’s Information System Author: Martin Kučera Department: Department of Computer Science and Engineering Supervisor: Ing. Kamil Matoušek, Ph.D. Supervisor's e-mail address:
[email protected] Opponent: MUDr. Miloslav Vojíř, CSc. Abstract: The work is focused on design and implementation of an application for supporting dentist’s standard activities. It analyses dentist’s profession routine, introduces necessary records about seeing and patient, which have to be preserved. In dependence on real requirements of dental surgery and providing its smooth run, it defines data structures and graphical user interface (GUI). As a result of the project is stable functional core of a system, which will be further extended in way that can be used for dental surgeries.
3
OBSAH 1 Motivace projektu a úvodní slovo ................................................. 5 2 Úvod do problematiky ................................................................... 6 2.1 Registrace pacienta................................................................... 6 2.2 Zubní kříž ................................................................................ 8 2.3 Výkony – zdravotní péče poskytovaná zubními lékaři ........... 11 3 Struktura řešení, návrh a implementace systému ......................... 13 3.1 Volba programovacího jazyka a vývojového prostředí........... 13 3.2 Systémová databáze ................................................................ 14 3.3 Definice přístupu do DB z prostředí MS Visual Studia........... 17 4 Uživatelský manuál ....................................................................... 21 4.1 Expresní nápověda................................................................... 21 4.2 Správa kartotéky....................................................................... 21 4.3 Karta pacienta........................................................................... 24 4.4 Správa databáze......................................................................... 29 5 Závěrčné zhodnocení...................................................................... 36 6 Použité zdroje a software................................................................ 38 7 Přílohy............................................................................................. 39
4
1. MOTIVACE PROJEKTU A ÚVODNÍ SLOVO Začátkem tohoto roku (2007) jsem navštívil veletrh Pražské Dentální Dny, kde jsem se seznámil s produkty firmy HoboSoft - firma nabízí programy pro zabezpečení chodu zubních ordinací a laboratoří (možno shlédnout na internetové adrese http://www.hobosoft.cz/ ). Mě z nabídky HoboSoftu zajímal konkrétně produkt Stomatolog, který má komplexně podporavat činnost zubních lékařů. Avšak když se podíváme na produkt kriticky, snaží se oslovit co nejšírší skupinu uživatelů, zubních lékařů i specialistů, a tím implementuje spousty funkcí, které např. praktický zubní lékař nevyužije. Dle mého osobního názoru by jednotlivé obory zasloužily i diferencovanou verzi softwaru. Z tohoto důvodu jsem začal navrhovat a realizovat program RegDent, který bude zaměřen pouze na praktického zubního lékaře, jako koncového uživatele, a bude se snažit o maximální jednoduchost a ovladatelnost. V systému by měly být pouze funkce, které jsou z pohledu dentisty využitelné a tedy přínosné. V rámci bakalářské práce jsem se tedy snažil o vytvoření funkčního jádra, které bude obsahovat nejzákladnější části takového systému. Společně s MUDr. Miloslavem Vojířem, CSc. jsem konzultoval nejnutnější záznamy, které je třeba vést o pacientech a jejich návštěvách, provedených výkonech a stanovených diagnózách. Na základě toho jsem vytvořil program, který by činnosti dentisty podpořil a pokud možno minimalizoval čas nutný k řádnému vedení a spravování kartotéky pacientů. V této fázi je systém schopen udržovat informace nutné pro zubařskou praxi a komfortně napomáhá dentistovi ve výkonu praxe. Avšak pro plnou integraci systému do zubních ordinací je žádoucí dopracovat některé části sytému (bude uvedeno dále v textu).
5
2. ÚVOD DO PROBLEMATIKY
Cílem této části je poskytnout čtenáři základní informace o fungování zubní ordinace. Kapitola stručně popisuje jaké informace, po jakou dobu a z jakého důvodu mají být uchovávány.
2.1 Registrace pacienta Z pohledu zubního lékaře se stává pacient pacientem v okamžiku, kdy poprvé vstoupí do ordinace a projde registrační procedurou, kdy o sobě podá veškeré nutné informace a lékař si je zapíše do kartotéky. Zřejmě každý už takovou registraci v životě podstoupil, ať už u zubního lékaře či v jiném zdravotnickém zařízení. Od pacientů se vyžaduje podání základních údajů jako je bydliště, jméno, příjmení, datum narození, rodné číslo, zaměstnání, občanství, atd. V neposlední řade předložení průkazu pojišťovny, u které je pacient veden. Na obrázku níže je ukázka karty pacienta (Zdravotní záznam pro stomatologii – obr.1). V hlavičce jsou vyplněny informace o pacientovi, které jednoznačně identifikují osobu. Níže pak záznamy jednotlivých návštěv pacienta, zpravidla bývá první záznam vstupní prohlídky. V kartě pacienta může být samozřejmě založeno více takových listů.
6
(Obr. 1 – Zdravotní záznam pro stomatologii) 7
2.2 Zubní kříž Pro usnadnění orientace v kartě pacienta a v jeho záznamech se v zubařství zavedl takzvaný zubní kříž, který pomocí schematických značek poukazuje na ošetření zubu, stav zubu, popřípadě další informace. Zubní kříž rozděluje oblast dutiny ústní na čtyři části – pravou a levou horní čelist, pravou a levou dolní čelist (označení 1 – 4, dětská pak 5-8). V rámci každé čelisti jsou pak zuby číslovány od 1 do 8 (u dětí 1-5). Pokud si proti sobě čelně představíme obličej, vypadá číslování zubů v zubním kříži následovně:
1
2
8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 4
3
Z obrázku a tabulky pod ním si můžeme jednoduše odvodit, že například „jednička“ vpravo nahoře bude označena 11 nebo „čtyřka“ vlevo dole bude 34. První číslo vždy udává čelist a její část, druhé pak konkrétní zub v dané čelisti. Toto schematické značení se v kartě pacienta používá tak, že se zubní kříž rozvine do jednoho řádku a to tímto způsobem: 18 17 ... 12 11 21 22 ... 27 28 48 47 ... 42 41 31 32 ... 37 38
8
Nebo alternativně (identické pořadí zubů): +8 +7 ... +2 +1 +1 +2 ... +7 +8 -8 -7 ... -2 -1 -1 -2 ... -7 -8 S tím rozdílem, že horní čelist je značná symbolem „+“ a dolní čelist symbolem „-“. Do takto rozloženého zubního kříže se zapisují stanovené schematické značky pro vyplňování schémat chrupu, které usnadňují práci a urychlují činnost dentisty. Ze schematických značek uvádím pro názornost následující: = kaz = pulpitis = gangréna = zub k ex rakci = zub extrahovaný = zub neprořezaný = korunka = fasetová korunka = čepová korunka = mezičlen s f setou = mezičlen litý = inlay = plomba = dentitio difficilis = zubní kámen = paradontální chobot a další... Na obr. 1 (strana 7) je formulář „Zdravotní záznam pro stomatologii“ – na zadní straně tohoto formuláře jsou připraveny právě výše zmiňovaná schémata chrupu pro vyplňování značek schémat chrupu (viz obr. 2 na následující straně) a dalších rozšiřujících záznamů o pacientovi.
9
(Obr 2. – zadní strana formuláře „Zdravotní záznam pro stomatologii“)
10
2.3 Výkony – zdravotní péče poskytovaná zubními lékaři Zdravotní péče poskytovaná zubními lékaři je hrazena podle smluvních ujednání mezi zdravotní pojišťovnou a zdravotnickým zařízením. Existují globálně stanovené číselníky, podle kterých se hradí vykonaná práce dentisty. Kódy výkonů se nemění, mění se pouze úhrady za jednotlivé výkony. Číselníky jsou zpravidla platné po dobu jednoho pololetí.
Příklad číselníku pro II.pololetí 2002: kód 00901 00902 00903 00904 00905 00906 00907 00908 00909 00910 00911 00912 00913 00914 00915 00916 00917 00920 00921 00922 00923 00924 00925 00931 00932 00933 00934 00935 00936 00937 00939 00940 00941
název položky Vyšetření a ošetření registrovaného pacienta Opakované vyšetření a ošetření v rámci prevent. Péče Vyžádané vyšetření odborníkem nebo specialistou Kolektivní systematická péče o chrup dětí a dorostu Kolektivní profylaxe v rámci systematické péče o chrup dětí a dorostu Stomatologické ošetření registrovaného pacienta do 6 let nebo hendikepovaného pacienta Stomatologické ošetřebí registrovaného pacienta od 6 let do 15 let Akutní ošetření a vyšetření neregistrovaného pacienta jako odbornost 019 Klinické stomatologické vyšetření RTG vyšetření intraorální Zhotovení extraorálního snímku Náplň slinné žlázy kontrastní látkou Zhotovení ortopantomogramu Vyhodnocení ortopantomogramu Zhotovení telelrentgenového snímku lbi Anestezie na foramen mandibulae a infraorbitale Anestezie infiltrační Ošetření zubního kazu - stálý zub - fotokompozitní výplň Ošetření zubního kazu - stálý zub - fotokompozitní výplň Ošetření zubního kazu - dočasný zub Konzervativní léčba komplikací zubního kazu - stálý zub Konzervativní léčba komplikací zubního kazu - dočasný zub Konzervativní léčba komplikací zubního kazu II - stálý zub Konzervativní léčba chronických onemocnění paradontu Udržovací léčba chronických onemocnění paradontu Chirurgická léčba onemocnění paradontu malého rozsahu Chirurgická léčba onemocnění paradontu velkého rozsahu Kyretáž na zub Odebrání a zjištění přenosu transplantátu Artikulace chrupu Přechodné dlahy ke stabilizaci zubů s oslabeným paradontem Komplexní vyšetření a návrh léčby onemocnění dutiny ústní Kontrolní vyšetření a léčba onemocnění ústní sliznice
úhrada(Kč) 280 200 140 40 5 57 33 100 200 50 115 502 190 23 115 40 32 190 130 95 164 85 230 404 220 124 460 63 306 374 40 232 67
11
00943 00949 00950 00951 00952 00953 00954 00955 00956 00957 00958 00959 00960 00961 00962 00963 00965 00970 00971 00972 00973 00974 00975 00981 00982 00983 00984 00985 00986 00987 00988 00989 00990 00991 00992 00993
Měření galvanických proudů Extrakce dočasného zubu Extrakce stálého zubu Chirurgie tvrdých tkání dutiny ústní malého rozsahu Chirurgie tvrdých tkání dutiny ústní velkého rozsahu Chirurgické ošetřování retence zubů Konzervačně-chirurgická léčba komplikací zubního kazu Chirurgie měkkých tkání dutiny ústní malého rozsahu Chirurgie měkkých tkání dutiny ústní velkého rozsahu Traumatologie tvrdých tkání dutiny ústní malého rozsahu Traumatologie tvrdých tkání dutiny ústní velkého rozsahu Intraorální incize Zevní incize Ošetření komplikací chirurgických výkonů v dutině ústní Konzervativní léčba onemocnění temporomandibulárního kloubu Injekce i.m., i.d., s.c. Čas stomatologa strávený dopravou za imobilním pacientem Sejmutí fixní náhrady - za každou pilířovou konstrukci Provizorní ochranná korunka v ordinaci Oprava fixní náhrady v ordinaci Oprava nebo úprava snímatelné náhrady v ordinaci Odevzdání stomatologického výrobku Ochranný můstek zhotovený razidlovou metodou Diagnostika ortodontických anomálií Zahájení léčby ortodontických anomálií fixním ortodont.aparátem na jeden zubní oblouk Kontola léčby ortodontických anomálií jinými postupy než s použitím fixního ortodontického aparátu Ukončení léčby ortodontických anomálií jinými postupy než s použitím fixního ortodontického aparátu Ukončení léčby ortodontických anomálií s použitím fixního ortodontického aparátu Ukončení léčby ortodontických anomálií jinými postupy než s použitím fixního ortodontického aparátu Stanovení fáze růstu Analýza telerentgenového snímku LBI Analýza ortodontických modelů Diagnostická přestavba ortodontického modelu Nasazení prefabrikovaného intraorálního oblouku Nasazení extraorálního tahu nebo obličejové masky Navázání parciálního oblouku
80 75 85 257 589 402 281 194 458 201 273 73 180 41 104 35 150 32 63 66 35 0 520 320 950 480 240 530 300 35 100 100 300 150 130 110
Tyto, popřípadě další výkony jsou každý měsíc zpracovávány a odesílány jednotlivým zdravotním pojišťovnám. Na základě předložených výkazů vyplatí pojišťovna stomatologovi odměnu.
12
3. STRUKTURA ŘEŠENÍ, NÁVRH A IMPLEMENTACE SYSTÉMU
V této části se budu věnovat technickému návrhu systému, návrhu databáze, volbou programovacího jazyka a vývojových prostředků. Rovněž věnuji část této kapitoli práci s vývojovými proštředky a jejich využitelné možnosti v rámci tohoto projektu.
3.1 Volba programovacího jazyka a vývojového prostředí Již od počátku jsem přemýšlel o vývoji systému v programovacím jazyce C++, zejména z toho důvodu, že s ním mám poměrně dobrou zkušenost. Postupem času však přišla v úvahu Java a C#, jakožto prostředky moderního vývoje software. Který jazyk tedy zvolit C++, C# nebo Java? Od počátku bylo přání vyvíjet program v C++, ale po dalším zvažování mě odradila zejména nepřítomnost Garbage Collectoru a tedy „pracnost“ vývoje aplikace. Nehledě na to, že chyba, kterou bych mohl udělat neuvolněním, předčasným uvolněním nebo zbytečným alokováním paměti by mohla po delším chodu programu vést k jeho kolapsu. Takovou chybu bych pak jen těžko hledal. C++ nebo Java? Oba jazyky odstraňují riziko špatného manipulování s pamětí tím, že hlídají životnost všech objektů v aplikaci. V Javě se o to stará JVM (Java Virtual Machine), která opět uvolní systémovou paměť, na kterou neexistuje reference (paměť je takzvaně „garbage collected“). V C# se o uvolňování paměti stará CLR (Common Language Runtime), který pravidelně kontroluje datovou haldu („heap“) a periodicky hledá objekty, na které neexistuje reference.
13
Stále není jasno!? Jako velkou výhodu Javy spatřuji v její platformové nezávislosti, což mě hodně lákalo v rámci případných ušetření nákladů na software (Windows) v ordinacích. Avšak musím uznat, že většina desktopových aplikací je psaná právě pod Windows a uživatelé jsou zvyklí spíše na produkt Microsoftu než, byť již také pěkně graficky zpracované, distribuce Linuxu. Volba tedy zněla Windows, a i když uznávám C# a Javu jako rovnocenné soupeře, přeci jenom větší sílu ve Windows má C# a prostředí .NET. Jaké vývojové prostředí pro C#? V tuto chvíli už jsem měl jen jeden požadavek, aby bylo prostředí využitelné pro tvorbu komerčních aplikací bez nutnosti zakoupit licenci. Po zkoumání nabídky prostředí jsem selektoval Sharp Develope 2.0 a Microsoft Visual Studio 2005 Express Edition (na doporučení vedoucího práce), obě prostředí vyhovovala požadavku. Po odzkoušení obou vývojových nástrojů se mi mnohem více zamlouvalo MS Visual Studio – práce v prostředí, integrované funkce, komponenty, psaní kódu, vše je velmi intuitivní a snadno využitelné. Jako další důvod „pro“ bylo použití databázového stroje Microsoft Server 2005 Express Edition (rovněž produkt Microsoftu a předpoklad bezproblémového propojení databáze s aplikací). Zvolená kombinace pro psaní aplikace je C# (Microsoft Visual Studio 2005 Express Edition) a Microsoft SQL Server 2005 Express Edition.
3.2 Systémová databáze Pro manipulaci s datovým úložištěm byl nainstalován program SQL Server Managament Studio Express. Přes toto rozhraní byla celá databáze vytvořena. Návrh tabulek, jejich provázání, definování jednotlivých atributů a vygenerování SQL, byl použit Toad Data Modeler (výrobce - Quest Software, freeware), který je schopen generovat SQL právě pro MS SQL Server 2005. V závislosti na požadavcích byly definovány tyto entity (viz schéma databáze na obr. 3): 14
PACIENT – záznamy o pacientovi INSURANCE – záznamy pojišťoven CROSS , CROSS2 – v programu jsou dva zubní kříže a to z toho důvodu, aby mohly být k jednomu zubu vztaženy dvě značky (například – značka pro plombu + značka pro mrtvý zub) PHYSICIAN – záznamy o ošetřujícím lékaři
(Obr. 3 – schéma databáze) 15
MEDICALS – databáze léků, medikamentů, které může zubní lékař prodat přímo v ordinaci SEEING – tabulka pro ukládání návštěv pacientů DIAGNOSIS – tabulka obsahuje číselník výkonů s odpovídajícími úhradami pro dané pololetí (na základě smlouvi mezi lékařskými institucemi a pojišťovnami) DIAGNOSIS_TEXT – v této tabulce se ukládají lékařem definované texty, které často používá, aby je nemusel vypisovat pokaždé znovu, stačí je načíst z této tabulky MARK_PICTURES – tabulka pro ukládání schematických značek Script pro vytvoření tabulek je přiložen v závěru práce – část „Přílohové materiály“. Byl jednoduše vložen do SQL příkazové řádky v MS SQL Server Managamentu (jako „SQL Query“). Pro identifikační klíče jednotlivých tabulek je v databázi nastaven autoinkremet, takže v programu není nutné hlídat generování identifikátorů. Postup úpravy a nastavení atributů je znázorněn na dalším obrázku (obr. 4, strana 17). Nastavena je hodnota „(Is Identity)“ na „Yes“, „Identity increment“ na 1 (od jakého celého čísla se má začít generovat řada) a „Identity Seed“ na 1 (hodnota inkrementu). Stejný postup se uplatnil i při definici identifikačních klíčů ostatních tabulek. Alternativní způsob by byl upravit SQL pro vytvoření tabulek. Ale vzhledem k tomu, že k úpravě došlo až v okamžiku, kdy už byly tabulky definovány, bylo využito možností MS SQL Server Managament Studia výše popsaným způsobem.
16
(Obr. 4 – Nastavení hodnot autoinkrementu)
3.3 Definice přístupu do DB z prostředí MS Visual Studia Připojení k datábázi z prostředí MS Visual Studia se nastaví velmi jednoduchým způsobem. MS Visual Studio zde potvrzuje, že je velmi vhodným nástrojem pro tvorbu rozsáhlých systémů a desktopových aplikací napojených na databáze. Na obr.5 a obr.6 je postup vytvoření datového zdroje („Data Source“) v projektu. Touto jednouduchou procedurou se vytvoří „Connection String“ k datovému zdroji a zbývá pouze jedinné – dodefinovat, s jakými objekty chceme v aplikaci pracovat. Objekty se nám automaticky předpřipraví a ulehčí práci s daty. (definice objektů obr. 7, strana 19)
17
(obr.5 – Vytvoření datového zdroje v MS Visual Studiu – 1.část)
(obr.6 – Vytvoření datového zdroje v MS Visual Studiu, 2.část)
18
(obr.7 – Dodefinování datových objektů)
Nyní se ocitáme v okamžiku, kdy je vše připravené pro tvorbu aplikační logiky, designování formulářů, vytváření uživatelského rozhraní (GUI) a funkční využitelné aplikace. Každá tabulka má vytvořený tzv. TableAdapter, který usnadňuje přístup k datům a manipulaci s nimy. Součástí všech TableAdapterů je možnost přidat libovolné množství SQL příkazů (insert, delete, update, select, ...). Kromě toho jsou v databázovém systému dostupné a použité tzv. skalární funkce, které se aplikují na jeden argument (sloupec) a vrací jen jednu hodnotu. Což může být jakákoli agregační funkce (např. SUM, COUNT,...) nebo SQL dotaz, který obsahuje SELECT a očekává pouze jednu hodnotu jako výsledek dotazu (viz příklad z aplikace níže).
19
Skalární SQL dotaz pro načítání obrázků zubařských symbolů z tabulky MARK_PICTURES vypadá takto: SELECT image FROM MARK_PICTURES WHERE id_mark=@id_mark Pojmenování dotazu je GetImageById(@id_mark) (v závorce je hodnota @id_mark, kterou musíme v kódu předat do dotazu, aby byl korektně vykonán), příklad práce s tímto dotazem uvádím na příkladu: Image bt = marK_PICTURESTableAdapter1.GetImageById(imageId);
Přístup k ostatním SQL skriptům je v aplikaci používán stejným způsobem jako uvedená skalární funkce s tím rozdílem, že místo jedné hodnoty vrací celé tabulky , které se vkládají do DataGridView komponent nebo do datových struktur DataTable.
20
4. UŽIVATELSKÝ MANUÁL Tato kapitola uživatele seznamuje se všemi funkcemi, které může v programu využít, má za úkol názorně vysvětlit práci s aplikací RegDent. Snažím se vše vysvětlit co nejjednodušší možnou cestou, výklad je krátký a v kombinaci s nasnímanými okny programu poskytuje zubnímu lékaři komplexní přehled funkcí aplikace a vede uživatele cestou rychlého zvládnutí a zažití ovládání.
4.1 Expresní nápověda Podpora práce a rychlejší osvojení funkcí aplikace je podpořeno funkcí tzv. expresní
nápovědy,
kdy
po
zaškrtnutí
položky
zobrazovat
nápovědu
(v horní části hlavního formuláře a formuláře pro správu databáze) aplikace zobrazuje u každé položky tip k ovládání programu. Tím se i novému uživateli otevírá možnost velmi komfortního ovládání RegDentu již od samozného začátku práce s programem.
(ilustrace expresní nápovědy)
4.2 Správa kartotéky Ke kartotéce pacientů se dostaneme velmi snadno, hned po spuštění RegDentu se zobrazí okno s přehledem pacientů a základními tlačítky pro administraci kartotéky (obr. 8).
21
(obr. 8 – výchozí okno aplikace, kartotéka)
REGISTRACE PACIENTA V okamžiku spuštění je program připraven ihned přijmout záznam o novém pacientovi, provést jeho registraci. V této části si po jednotlivých krocích ukážeme, jak postupovat. Obrázek po levé straně ukazuje základní ovládací prvek kartotéky. Po vyplnění informací o pacientovi stiskneme „REGISTROVAT“ a pacient je vložen do kartotéky (před uložením program automaticky zkontroluje formát údajů, například rodného čísla – musí být ve tvaru „xxxxxx/xxx“, kde x jsou celá čísla, zadání pojišťovny, atd.). V případě, že jsou pole pro vkládání plná a chceme je vyčistit, učiníme tak provedením akce „Vyčistit formulář“.
22
Pro hledání a filtrování zobrazovaných záznamů z kartotéky zaškrtneme možnost „vyhledat“. Do polí zadáme filtrační požadavky, např. chceme-li zobrazit pacienty s příjmením začínajícím na „K“ a rodným číslem, které obsahuje řetězec „84“ -> zadáme do kolonky příjmení „k“ (nebo „K“) a do pole RČ „84“. Stiskneme „VYHLEDAT“ a v náhledu do kartotéky se nám zobrazí pouze karty vyhovující zadanému filtru.
ZMĚNA ÚDAJŮ O PACIENTOVI, ZOBRAZENÍ KARTY Editaci záznamů provedeme tím, že pacienta nejprve vybereme (to uděláme dvojklikem myší na záznam v náhledu do kartotéky) a automaticky se nám vyplní položky údajů o pacientovi (obr 9). Zároveň se zpřístupní další ovládací prvky, které se již týkají konkrétního pacienta (tlačítko „ULOŽIT ZMĚNY“ a „KARTA PACIENTA“). Nyní je možné změnit potřebné informace o pacientovi a po stisknutí tlačítka „ULOŽIT ZMĚNY“ jsou vykonané úpravy propsány do kartotéky. Tlačítkem „KARTA PACIENTA“ se přepneme přímo do karty pacienta – viz. další kapitola.
23
(obr.9 – Selektování jednoho pacienta)
4.3 Karta pacienta Po zobrazení karty se nám jako první ukáže pohled do zubního kříže (obr. 10). Rovněž se změní menu vedle hlavičky karty, nyní zde máme možnost vrátit se zpět do hlavního okna kartotéky. V kartě pacienta již není možnost měnit údaje v hlavičce (pojišťovna, léky, krvácivost,...) – to lze provést pouze z okna pro správu kartotéky.
24
(obr. 10 – Karta pacienta, zubní kříž)
ZUBNÍ KŘÍŽ A PRÁCE S NÍM K dispozici je dvouřádkový zubní kříž, je tedy možné k jednomu zubu vztahovat dvě schematické značky. Schematickou značku změníme či zadáme kliknutím na tlačítko pod kolonkou označující zub. Uživateli se zobrazí okno s nabídkou
značek
(viz
obrázek nalevo). Zde je možné označit schematickou značku, kterou
si
přejeme
k zubu
přiřadit a stiskneme tlačítko „Vybrat značku“. Pokud si nepřejeme
vybrat
žádnou
značku, klikneme na „Storno“.
25
Před opuštěním karty pacienta nesmíme zapomenout stisknout tlačítko „ULOŽIT STAV“. Pokud tak neučiníme, provedená akce se neuloží!
ZÁZNAMY NÁVŠTĚV Do záložky ošetření vstoupíme kliknutím do hlavičky záložky – „Ošetření“, tím zobrazíme lékařské záznamy a detaily jednotlivých návštěv (viz obr. 11)
(obr. 11 – Záložka ošetření) Textový záznam návětěvy můžeme vložit do pole text, kam ho můžeme sami napsat nebo si vypomoci tím, že část textu vložíme z předem definované šablony a to tak, že stiskem tlačítka
zobrazíme okno s texty, které lze vložit
(viz obr. 12). V okně lze specifikovat lokalizaci zubu
a označit text, který
si přejeme vložit. Po potvrzení a uzavření pomocného okna zapíšeme text do karty stiskem tlačítka
.
26
(obr. 12 – Vyvolání okna s vložit text)
VÝBĚR OŠETŘUJÍCÍHO LÉKAŘE V případě, že program využívá pouze jeden zubní lékař, je ošetřující vybrán automaticky jako jediný možný uživatel. V případě, že ne, je třeba ošetřujícího vybrat ze seznamu. ZAPSÁNÍ VÝKONU K evidenci výkonů slouží část v kartě,
která
je
v boxu
s nadpisem „Výkony z číselníku“. Pro načtení výkonu otevřeme číselník kliknutím na „Otevři číselník“ (obr 13.). A v nově otevřeném okně vyberem výkon, který odpovídá provedenému ošetření a ten vložíme pomocí tlačítka „Vybrat označené“.
27
(obr. 13 – Číselník výkonů)
Selektovaný výkon se nejprve propíše
do
formuláře,
zvolíme
četnost
kde
provedeného
výkonu. A opět zapíšeme do karty pomocí tlačítka „ULOŽIT“.
PRODEJ MEDIKAMENTU Pro
výběr
medikamentu
stiskneme
tlačítko
„1.Vyhledat“. V okně pro výběr medikamentu označíme
požadovaný
záznam,
potvrdíme
(„VYBER OZNAČENÝ“). Zadáme množství, které pacientovi prodáme a potrvdíme propsání do záznamů návštěv („2.Předepsat“).
28
4.4 Správa databáze V programu RegDent je implementováno grafické rozhraní pro správu databáze a konfiguraci programu. Uživatel může bez zásahu programátora modifikovat databázi a program tak, aby pro něj byl ještě větším přínosem. Následující část manuálu popíše funkce pro správu databáze. SPUŠTĚNÍ ROZHRANÍ PRO PŘÍSTUP DO DATABÁZE K ovládacímu modulu databáze se dostaneme přes menu Program -> Databáze.
POJIŠŤOVNY V záložce pojišťovny (obr. 14) můžeme aktualizovat vložené záznamy pojišťoven, po kliknutí do náhledu na určitou pojišťovnu, jsou záznamy pojišťovny automaticky načteny do editačních polí po levé straně. Zde můžou být změněny a po stisku „Aktualizovat záznam“ opět uloženy do databáze.
(obr.14 – Správa záznamů pojišťoven) tímto tlačítkem můžeme vyčistit editační pole – vhodné provést před vložením nové pojišťovny.
29
uloží novou pojišťovnu do databáze, není však možné vložit pojišťovnu s číslem, které má jiná pojišťovna – v tomto případě program nedovoluje duplicity. smaže označený záznam v náhledu do databáze, nelze však smazat pojišťovnu, kterou má nějaký pacient.
ZNAČKY V ZUBNÍM KŘÍŽI Každý dentista si může sám zvolit, zda bude používat značky, které již v programu jsou nebo si nahraje své vlastní. Může samozřejmě i přidat nové značky, které třeba v aplikaci chybí. (obr. 15) Nahrání nové značky či její aktualizace má 3 kroky, rozdílný je až třetí. 1.krok – zadání cesty k obrázku (doporučuje se použít obrázek o libovolném rozlišení, ale o poměru stran 1x1, jeho velikost je pak změněna na velikost, která je vhodná pro použití v zubním kříži) 2.krok – pojmenování značky a stisk „Preview“ – značka je zmenšena a zobrazena v náhledovém okénku Preview 3.krok – pro aktualizaci značky stisknout „Aktualizuj značku“, pro vložení nové značky stisknout „!Vložit do DB!“
30
(obr. 15 – Značky v zubním kříži)
ČÍSELNÍK VÝKONŮ Vykonání požadované akce přímo závisí na zvolené možnosti v boxu „Akce“ na levé straně formuláře.
(obr.16 – Číselník výkonů) 31
Při procházení záznamů stačí kliknutím myši označit řádek záznamu v náhledu do databáze a selektovaný zám se propíše do editačních polí v horní části formuláře.
Lze změnit (aktualizovat) pouze poznámku k výkonu, název výkonu nebo úhradu za výkon, kterou bude nutno aktualizovat nejčastěji. Po dokončení úpravy stačí potvrdit tlačítkem.
Pokud potřeje dentista vložit nový výkon, lze to velmi jednoduše udělat touto zaškrtnutou volbou, zadáním výkonu v editačních polích a potvrzením stiskem tlačítkem.
Výkon může být smazán pouze tehdy, není-li použit v kartotéce nějakého pacienta. Po stisku tlačítka je smazán právě jeden označený výkon.
LÉKAŘI Poprvé spuštěný program nemá vytvořeného žádného ošetřujícího lékaře (uživatele), proto je nezbytné zadat uživatele v záložce „Lékaři“ (obr. 17) vyplněním editačních polí a potvrzením („Vložit záznam“).
32
Dvojklikem na ošetřujícího v náhledu do databáze jsou načteny informace do editačních polí, kde mohou být upraveny a aktualizovány v databázi („Aktualizovat záznam“).
(obr. 17 – zadání uživatele)
MEDIKAMENTY Lékař může využít funkci programu pro správu medikamentů (obr. 18). Při návštěvě pacienta je v RegDentu podporována funkce výdeje léčiva. Funkce se stává použitelnou až po naplnění databáze medikamenty, které chce lékař prodávat. Údržby nabídky se týká formulář z obr. 18, kde lze záznamy aktualizovat a vkládat nové obdobným způsobem jako v „Číselníku výkonů“.
33
(obr. 18 - Medikamenty)
DIAGNÓZY V rámci
urychlení
práce
zubního
lékaře
při
psaní
diagnóz
je
implementována možnost vložit předem definovaný text (viz tlačítko v kartě pacienta – záložka „Ošetření“). Texty jsou vkládány a definovány přes nástroj pro správu databáze, v záložce „Diagnózy“ (obr. 19). Po zvolení akce a aktualizaci záznamu (zadání nového záznamu do editačních polí, označení záznamu určeného ke smazání) lze tlačítkem
vykonat zvolenou
činnost.
34
(obr. 19 - Diagnózy)
35
5. ZÁVĚREČNÉ ZHODNOCENÍ Kapitola závěr je věnována zhodnocení programu, uvedení možných nedostatků a výhod aplikace, nastínění dalšího možného vývoje RegDentu a v neposlední řadě klasifikaci nových zkušeností, které byly v průběhu vývoje získány. Bez obav můžu říct, že program RegDent splňuje hlavní požadavek, který byl vytyčen na začátku práce, a to vytvořit program snadno ovladatelný a implementující základní funkce pro možnost budoucího rozšíření. Souborem formulářů pro správu a udržování kartotéky pacientů, integrovaným nástrojem pro administraci databáze a odladěnou aplikační logikou, vytváří stabilní a silné jádro informačního systému pro praktické zubní lékaře. Nevidím žádný problém v dalším pokračování na vývoji programu, odladění nových komponent a konečné uvedení aplikace RegDent na trh, kde by se mohl stát konkurenceschopným produktem právě díky své jednoduchosti a snadné ovladatelnosti. Největší „nedostatek“ aplikace spatřuji v tom, že v současném stavu není komerčně prodejná a prakticky využitelná. Aby mohla být, je třeba dopracovat výstupy pro pojišťovny - v programu jsou připravené výkony (číselník výkonů), které se ukládají v kartě pacienta, ty bude v budoucnu nutné zpracovat a jako výstup vygenerovat výkazy pro pojišťovny, na základě kterých bude dentistovi práce proplacena. Další nezbytnou funkcí, kterou zatím program nepodporuje, je tisk formulářů kartotéky. Zákon ukládá zubním lékařům archivovat veškeré záznamy o pacientech po dobu 20 let v papírové podobě. Důvodem tohoto nařízení je využitelnost stomatologických záznamů v soudním lékařství. Program nepovažuji za dokonalý, ale myslím si, že svou funkčností ve všech ohledech dostál zadání. Bakalářská práce pro mě byla celkově velkým přínosem. Jako tu největší a nejhodnotnější zkušenost však považuji možnost stát u zrodu, nyní již, fungujícího 36
a v budoucnu prakticky použitelného programu. Ať už to byly konzultace s panem doktorem MUDr. Miloslavem Vojířem, CSc., během kterých jsem se postupně seznamoval s prostředím zubního lékařství, a tím postupně definoval požadavky na systém, konzultace s Ing. Kamilem Matoušekem, Ph.D., kde se pozvolna rýsovalo technické zázemí aplikace, navrhování přijatelného grafického rozhraní, psaní a promýšlení aplikační logiky, atd. Prakticky jsem si ověřil, jak důležitý je do detailu promyšlený návrh většího informačního systému, jak nám může předem rozmyšlené řešení usnadnit práci (a nedostatky návrhu naopak přitížit). Věřím, že tuto zkušenost určitě nezapomenu a v budoucnu se jí budu řídit dvakrát tolik, ostatně jak dlouho už platí „Dvakrát měř, jednou řež!”.
37
6. POUŽITÉ ZDROJE A SOFTWARE SOFTWARE: Quest Software – Toad Data Modeler (freeware) Microsoft SQL Server 2005 Express Edition Microsoft SQL Server Managament Microsofr Visual C# 2005 Express Edition
POUŽITÉ ZDROJE A LITERATURA: [1] – Karli Watson: Beginnig C# 2005 Databases [2] – Peter Wright: Beginning C# 2005 Express Edition [3] – Christian Nagel, Bill Evjen, Jay Glynn, Morgan Skinner, Karli Watson: Professional C# 2005 with .NET 3.0 [4] – W3 Schools, Server Scripting – SQL [online] Dostupné na www: http://www.w3schools.com/sql/default.asp Odkaz platný ke dni: 20.8. 2007 [5] – C# Corner, diskuze a skripty [online] Dostupné na www: http://www.c-sharpcorner.com/ Odkaz platný ke dni: 20.8. 2007 [6] – Microsoft Developer Network [online] Dostupné na www: http://msdn2.microsoft.com/en-us/default.aspx Odkaz platný ke dni: 20.8. 2007 [7] – Vývoj aplikací - databáze [online] Dostupné na www: http://interval.cz/vyvoj-aplikaci/databaze/ Odkaz platný ke dni: 20.8. 2007 [8] – Diskuze: Java vs. C# - který jazyk zvolit? [online] Dostupné na www: http://www.zive.cz/default.aspx?article=104694 Odkaz platný ke dni: 20.8. 2007
38
7. PŘÍLOHY
OBSAH CD:
Databáze: -
RegDant.jpg (schema databáze)
-
soubor RegDent.mdb (data)
-
RegDent.md2 (soubor pro Toad Data Modeler)
-
WindowsApplication1
-
Včetně záloh ve složce …\WindowsApplication1\!BACKUP
-
script.sql (SQL pro vytvoření tabulek)
-
BP Martin Kučera.doc (elektronická podoba bakalářské práce)
-
Úvod BP.doc (hlavička bakalářské práce- první strana)
-
Desky.doc (desky bakalářské práce)
Program:
Sql:
Text:
Návod k instalaci: -
návod.doc (návod jak zkompilovat program v MS Visual Studiu)
PŘED ZKOMPILOVÁNÍM PROGRAMU V MS C# STUDIU: Aby byl projekt funkční, je třeba změnit cestu k databázi: Project -> Windows Application1 Properties -> Settings -> V poli Value změnit cestu k databázi na aktuální umístění 39
SQL PRO VYTVOŘENÍ TABULEK: /* Created Modified Project Model Company Author Version Database */
7/9/2007 8/26/2007
MS SQL 2005
Create table [PACIENT] ( [pacient_id] Integer NOT NULL, [firstname] Char(50) NOT NULL, [surname] Char(50) NOT NULL, [personal_number] Text NOT NULL, UNIQUE ([personal_number]), [birth_date] Text NULL, [phone1] Text NULL, [phone2] Text NULL, [email] Text NULL, [allergy] Text NULL, [health_status] Text NULL, [povolani] Text NULL, [insurance_id] Integer NOT NULL, [street] Text NULL, [city] Text NULL, [PSC] Integer NULL, [medicines] Text NULL, [bleeding_time] Text NULL, [registration_date] Text NULL, [handicap] Text NULL, Primary Key ([pacient_id],[insurance_id]) ) go Create table [INSURANCE] ( [insurance_id] Integer NOT NULL, [insurance_no] Smallint NOT NULL, UNIQUE ([insurance_no]), 40
[name] Text NULL, Primary Key ([insurance_id]) ) go Create table [CROSS] ( [id_record] Integer NOT NULL, [11] Text NULL, [12] Text NULL, [13] Text NULL, [14] Text NULL, [15] Text NULL, [16] Text NULL, [17] Text NULL, [18] Text NULL, [21] Text NULL, [22] Text NULL, [23] Text NULL, [24] Text NULL, [25] Text NULL, [26] Text NULL, [27] Text NULL, [28] Text NULL, [31] Text NULL, [32] Text NULL, [33] Text NULL, [34] Text NULL, [35] Text NULL, [36] Text NULL, [37] Text NULL, [38] Text NULL, [41] Text NULL, [42] Text NULL, [43] Text NULL, [44] Text NULL, [45] Text NULL, [46] Text NULL, [47] Text NULL, [48] Text NULL, [note] Text NULL, [pacient_id] Integer NOT NULL, [insurance_id] Integer NOT NULL, 41
Primary Key ([id_record],[pacient_id],[insurance_id]) ) go Create table [SEEING] ( [seeing_id] Integer NOT NULL, [date] Datetime NULL, [diagnosis] Text NULL, [note] Text NULL, [quantity] Integer NULL, [diagnosis_name] Text NULL, [diagnosis_code_number] Text NULL, [diagnosis_price] Money NULL, [diagnosis_note] Text NULL, [pacient_id] Integer NOT NULL, [insurance_id] Integer NOT NULL, [id_physician] Integer NOT NULL, [medicals_id] Integer NOT NULL, Primary Key ([seeing_id],[pacient_id],[insurance_id],[id_physician],[medicals_id]) ) go Create table [DIAGNOSIS] ( [id_diagnosis] Integer NOT NULL, [name] Text NOT NULL, [price] Money NOT NULL, [number] Text NOT NULL, UNIQUE ([number]), [note] Text NULL, Primary Key ([id_diagnosis]) ) go Create table [MARK_PICTURES] ( [id_mark] Integer NOT NULL, [image] Image NULL, [name] Text NULL, [note] Text NULL, Primary Key ([id_mark]) ) 42
go Create table [PHYSICIAN] ( [id_physician] Integer NOT NULL, [firstname] Text NULL, [surname] Text NULL, [street] Text NULL, [PSC] Integer NULL, [city] Text NULL, [telefon1] Text NULL, [telefon2] Text NULL, [email] Text NULL, [ICO] Text NULL, Primary Key ([id_physician]) ) go Create table [MEDICALS] ( [medicals_id] Integer NOT NULL, [name] Text NULL, [text] Text NULL, [price] Money NULL, [quantity] Text NULL, [medical_code] Text NULL, UNIQUE ([medical_code]), Primary Key ([medicals_id]) ) go Create table [CROSS2] ( [id_record] Integer NOT NULL, [11] Text NULL, [12] Text NULL, [13] Text NULL, [14] Text NULL, [15] Text NULL, [16] Text NULL, [17] Text NULL, [18] Text NULL, [21] Text NULL, [22] Text NULL, 43
[23] Text NULL, [24] Text NULL, [25] Text NULL, [26] Text NULL, [27] Text NULL, [28] Text NULL, [31] Text NULL, [32] Text NULL, [33] Text NULL, [34] Text NULL, [35] Text NULL, [36] Text NULL, [37] Text NULL, [38] Text NULL, [41] Text NULL, [42] Text NULL, [43] Text NULL, [44] Text NULL, [45] Text NULL, [46] Text NULL, [47] Text NULL, [48] Text NULL, [note] Text NULL, [pacient_id] Integer NOT NULL, [insurance_id] Integer NOT NULL, Primary Key ([id_record],[pacient_id],[insurance_id]) ) go Create table [DIAGNOSIS_TEXT] ( [id_Dtext] Integer NOT NULL, [Text] Text NOT NULL, Primary Key ([id_Dtext]) ) go
Alter table [SEEING] add foreign key([pacient_id],[insurance_id]) references [PACIENT] ([pacient_id],[insurance_id]) on update no action on delete no action go Alter table [CROSS] add foreign key([pacient_id],[insurance_id]) references [PACIENT] ([pacient_id],[insurance_id]) on update no action on delete no action 44
go Alter table [CROSS2] add foreign key([pacient_id],[insurance_id]) references [PACIENT] ([pacient_id],[insurance_id]) on update no action on delete no action go Alter table [PACIENT] add foreign key([insurance_id]) references [INSURANCE] ([insurance_id]) on update no action on delete no action go Alter table [SEEING] add foreign key([id_physician]) references [PHYSICIAN] ([id_physician]) on update no action on delete no action go Alter table [SEEING] add foreign key([medicals_id]) references [MEDICALS] ([medicals_id]) on update no action on delete no action go
UKÁZKA OKEN V GRAFICKÉM STYLU WINDOS XP:
(Karta pacienta 1)
45
(Karta pacienta 2)
(Správa databáze – Číselník výkonů)
46