Mendelova  zemědělská a lesnická univerzita v brně
Provozně ekonomická fakulta

 

                                                 

IS Lékárna
informační systém pro lékárnu

Vypracoval : Viktor Šuman
Obor : EI – 3.ročník
Datum odevzdání : 11. 1. 2005
Podpis :

Obsah
Root Process	4
Graph	5
Process IS Lekarna	5
Lists of objects	6
External Entity List	6
Data Store List	6
Data Item List	6
Process List	7
Subprocess IS Lekarna	8
Graph	8
Subprocess evidence dokladu	9
Subprocess prodej	9
Subprocess sklad	10
Subprocess evidence dokladu	11
Graph	11
Subprocess kontrola zavazku	11
Subprocess zauctovani obchodu	12
Subprocess prodej	13
Graph	13
Subprocess provedeni obchodu	14
Subprocess vydej leku	14
Subprocess zuctovani transakci	15
Subprocess sklad	16
Graph	16
Subprocess aktualizace skladovych karet	16
Subprocess kontrola stavu zasob	17
Process IS Lekarna	17
Process IS Lekarna	18
Process IS Lekarna	20

Neformální specifikace:
Lékárna vydává léky podle různých kritérií. Navrhněte IS, který zajistí evidenci a prodej léků na předpis a bez předpisu. Některé léky hradí pojišťovna, určité léky mohou být nahrazeny jinými. Některé léky smí předepsat pouze lékař - specialista.

Formální specifikace:
Informační systém Lékárna si klade za cíl poskytnout uživateli (i.e. zaměstnancům a manažerům lékárny) veškeré potřebné funkce pro chod lékárny. To znamená, že bude zabezpečovat veškerou potřebnou komunikaci s ostatními subjekty v obchodním styku, jimiž jsou:
-	pacienti
-	zdravotní pojišťovny
-	dodavatelé léků
-	finanční instituce (banka, která nám vede účet)
-	stát ve smyslu výstupu z IS účetnictví (odvody a podobně) (pozn. IS účetnictví nebude v tomto projektu řešen)
IS zajistí potřebnou evidenci léků, u těchto bude uchovávat údaje o tom, zda jsou distribuovány volně či pouze na lékařský předpis a z jaké části jsou hrazeny zdravotní pojišťovnou a kolik si na jejich pořízení přispívá sám pacient. Dále je důležité nabízet i alternativní léky pro případ, že některý lék není na skladě nebo jej z nějakého důvodu pacient prostě nechce.
IS bude také uchovávat aktuální evidenci skladových zásob, tj. kolik kusů daného léku máme momentálně na skladě.
K výše uvedeným funkcím je třeba definovat množinu předběžných pravidel IS:
-	dostupnost léku – V případě, že je lék pouze na předpis, musí zákazník předložit lékařský předpis, v opačném případě mu lék nebude vydán a bude mu nabídnut lék alternativní (pokud existuje).
-	úhrada léků ZP – Po každém prodejním dni bude odesláno vyúčtování („faktura“) za prodané léky jednotlivým zdravotním pojišťovnám, jejichž klienti si v tomto dni u nás zakoupili lék částečně nebo plně hrazený ZP.
-	tržby z prodeje – Opět po každém prodejním dni budou peníze z prodeje volně dostupných léků a peníze z doplatků odeslány do banky k uložení na účet.
-	závazky vůči dodavatelům – Dodavatelé nám po dodání léků vyfakturují jejich cenu a IS odešle bance platební příkaz, následně bude kontrolovat, zda od banky přišlo potvrzení o odeslání peněz na dodavatelův účet.
-	evidence zásob – Po každém uskutečněném prodeji léku bude aktualizována evidence zásob a v případě, že zbývající počet kusů léku klesne pod určenou konstantu, bude automaticky vygenerován a odeslán požadavek na další dodávku léku a následně zkontroluje, že nám dodavatel poslal zpět potvrzení objednávky. Po dodávce následuje opět pravidlo „závazky vůči dodavatelům“

Root Process
Process Tree
 IS Lekarna [1]
	evidence dokladu [1.1]
		kontrola zavazku [1.1.1]
		zauctovani obchodu [1.1.2]
	prodej [1.2]
		provedeni obchodu [1.2.1]
		vydej leku [1.2.2]
		zuctovani transakci [1.2.3]
	sklad [1.3]
		aktualizace skladovych karet [1.3.2]
		kontrola stavu zasob [1.3.1]

Graph

Process IS Lekarna
	Name:	IS Lekarna
	Code:	IS_LEKARNA
	Label:	
	Number:	1
	Lowest Level:	No
Process Description
IS Lekarna podporuje automatizaci provozu lekarny, umoznuje objednavat, evidovat (sklad) a prodavat leky koncovym uzivatelum.
Process Reference List
Connected via	Connected to	Src	Dst	 
alternativni nabidka	Pacienti (External Entity)	X	 	 
doplatek	Pacienti (External Entity)	 	X	 
faktura	Dodavatele (External Entity)	 	X	 
interni doklady	subS ucetnictvi (External Entity)	X	 	 
objednavky	Dodavatele (External Entity)	X	 	 
platebni prikaz	Banka (External Entity)	X	 	 
potvrtzeni	Banka (External Entity)	 	X	 
pozadavek na lek	Pacienti (External Entity)	 	X	 
trzby	Banka (External Entity)	X	 	 
uctenka	Pacienti (External Entity)	X	 	 
vyuctovani za leky	Zdravotni pojistovny (External Entity)	X	 	 

Lists of objects
External Entity ListExternal Entity List
Name	Code	 
Banka	BANKA	 
Dodavatele	DODAVATELE	 
Pacienti	PACIENTI	 
subS ucetnictvi	IS_UCETNICTVI	 
Zdravotni pojistovny	ZDRAVOTNI_POJISTOVNY	 

Data Store List
Name	Code	 
informace o lécích	INFORMACE_O_LECICH	 
leky na sklade	LEKY_NA_SKLADE	 
trzby a prispevky	TRZBY_A_PRISPEVKY	 
ucetni doklady	UCETNI_DOKLADY	 

Data Item List
Name	Code	Type	 
alternativa	ALTERNATIVA	I	 
castka	CASTKA	N	 
cena	CENA	N	 
datum	DATUM	DT	 
doplatek	DOPLATEK	N	 
doplatky	DOPLATKY	N	 
ID leku	ID_LEKU	I	 
ID transakce	ID_TRANSAKCE	I	 
ma_recept	MA_RECEPT	BL	 
mnozstvi	MNOZSTVI	N	 
pocet kusu	POCET_KUSU	N	 
prispevek	PRISPEVEK	N	 
prispevky	PRISPEVKY	N	 
uspech	USPECH	BL	 
vyzaduje recept	VYZADUJE_RECEPT	BL	 

Process ListProcess List
Name	Code	 
IS Lekarna	IS_LEKARNA	 

Subprocess IS Lekarna
Graph

Subprocess evidence dokladu
	Name:	evidence dokladu
	Code:	EVIDENCE_DOKLADU
	Label:	
	Number:	1.1
	Lowest Level:	No

Process Description
kontroluje uhradu faktur a eviduje ucetni doklady (komunikuje se subIS Ucetnictvi)
Process Reference List
Connected via	Connected to	Src	Dst	 
dodavky leku na sklad	sklad (Process)	X	 	 
faktura	Dodavatele (External Entity)	 	X	 
interni doklady	subS ucetnictvi (External Entity)	X	 	 
interni doklady2	ucetni doklady (Data Store)	X	 	 
platebni prikaz	Banka (External Entity)	X	 	 
potvrtzeni	Banka (External Entity)	 	X	 
vydejka a pokladni doklad	sklad (Process)	 	X	 

Subprocess prodej
	Name:	prodej
	Code:	PRODEJ
	Label:	
	Number:	1.2
	Lowest Level:	No

Process Description
řeší problémy spojené s prodejem léku
Process Reference List
Connected via	Connected to	Src	Dst	 
alternativni nabidka	Pacienti (External Entity)	X	 	 
doplatek	Pacienti (External Entity)	 	X	 
informace o doplatcich a dostupnosti	informace o lécích (Data Store)	 	X	 
pokladni doklady	sklad (Process)	X	 	 
potvrzeni o vyskladneni leku	sklad (Process)	 	X	 
pozadavek na lek	Pacienti (External Entity)	 	X	 
pozadavek na vydani leku	sklad (Process)	X	 	 
trzby	Banka (External Entity)	X	 	 
uctenka	Pacienti (External Entity)	X	 	 
vydejka leku	leky na sklade (Data Store)	X	 	 
vyuctovani za leky	Zdravotni pojistovny (External Entity)	X	 	 

 Subprocess sklad
	Name:	sklad
	Code:	SKLAD
	Label:	
	Number:	1.3
	Lowest Level:	No

Process Description
hlida stav skladu zasob a prevadi informace o peneznich tocich
Process Reference List
Connected via	Connected to	Src	Dst	 
dodavky leku na sklad	evidence dokladu (Process)	 	X	 
info o zasobach	leky na sklade (Data Store)	 	X	 
objednavky	Dodavatele (External Entity)	X	 	 
pokladni doklady	prodej (Process)	 	X	 
potvrzeni o vyskladneni leku	prodej (Process)	X	 	 
pozadavek na vydani leku	prodej (Process)	 	X	 
prijemka leku	leky na sklade (Data Store)	X	 	 
vydejka a pokladni doklad	evidence dokladu (Process)	X	 	 

Subprocess evidence dokladu
Graph

Subprocess kontrola zavazku
	Name:	kontrola zavazku
	Code:	KONTROLA_ZAVAZKU
	Label:	
	Number:	1.1.1
	Lowest Level:	Yes

Process Description
kontroluje, aby byly faktury od dodavatelů řádně placeny
Process Specification
pokud "faktura" then pošli "platebni prikaz"
pokud "potvrzeni" then pošli "potvrzeni o splaceni zavazku"
Process Reference List
Connected via	Connected to	Src	Dst	 
faktura	Dodavatele (External Entity)	 	X	 
platebni prikaz	Banka (External Entity)	X	 	 
potvrtzeni	Banka (External Entity)	 	X	 
potvrzeni o splaceni zavazku	zauctovani obchodu (Process)	X	 	 

Subprocess zauctovani obchoduSubprocess zauctovani obchodu
	Name:	zauctovani obchodu
	Code:	ZAUCTOVANI_OBCHODU
	Label:	
	Number:	1.1.2
	Lowest Level:	Yes

Process Specification
pokud "potvrzeni o splaceni zavazku" then odešli "dodavky leku na sklad" and odešli "interni doklady"
Process Reference List
Connected via	Connected to	Src	Dst	 
dodavky leku na sklad	sklad (Off-Page Connector)	X	 	 
interni doklady	subS ucetnictvi (External Entity)	X	 	 
interni doklady2	ucetni doklady (Data Store)	X	 	 
potvrzeni o splaceni zavazku	kontrola zavazku (Process)	 	X	 
vydejka a pokladni doklad	sklad (Off-Page Connector)	 	X	 

Subprocess prodej
Graph

Subprocess provedeni obchodu
	Name:	provedeni obchodu
	Code:	PROVEDENI_OBCHODU
	Label:	
	Number:	1.2.1
	Lowest Level:	Yes

Process Specification
pokud přijde "pozadavek na lek.ID leku":
IF "informace o doplatcich a dostupnosti.vyzaduje recept"=ANO and "pozadavek na lek.ma recept"=FALSE then "alternativni nabidka.ID leku" přiřaď "informace o doplatcich a dostupnosti.alternativni"
ELSE
pošli "pozadavek na lek.ID leku"
IF "potvrzeni o vydeji leku.uspech"=ANO then "uctenka.castka" přiřaď "info o doplatcich.cena" mínus "info o doplatcich.prispevek" a "info o prodeji in.doplatek" přiřaď "uctenka.castka" a "info o prodeji in.prispevek" přiřaď "info o doplatcich.prispevek"
ELSE
"alternativni nabidka.ID leku" přiřaď "informace o doplatcich a dostupnosti.alternativni"
Process Reference List
Connected via	Connected to	Src	Dst	 
alternativni nabidka	Pacienti (External Entity)	X	 	 
doplatek	Pacienti (External Entity)	 	X	 
info o prodeji in	zuctovani transakci (Process)	X	 	 
informace o doplatcich a dostupnosti	informace o lécích (Data Store)	 	X	 
potvrzeni o vydeji leku	vydej leku (Process)	 	X	 
pozadavek na lek	Pacienti (External Entity)	 	X	 
pozadavek na lek	vydej leku (Process)	X	 	 
uctenka	Pacienti (External Entity)	X	 	 

Subprocess vydej leku
	Name:	vydej leku
	Code:	VYDEJ_LEKU
	Label:	
	Number:	1.2.2
	Lowest Level:	Yes

Process Specification
pokud přijde "pozadavek na lek":
"pozadavek na vydani leku" přiřaď "pozadavek na lek"

pokud přijde potvrzení o vyskladnění léku:
"potvrzeni o vydeji leku.uspech" přiřaď "potvrzeni o vyskladneni leku.uspech" a "vydejka leku" přiřaď "pozadavek na lek"
"pokladni doklady" přiřaď VYGENERUJ pokladni doklad

Process Reference List
Connected via	Connected to	Src	Dst	 
pokladni doklady	sklad (Off-Page Connector)	X	 	 
potvrzeni o vydeji leku	provedeni obchodu (Process)	X	 	 
potvrzeni o vyskladneni leku	sklad (Off-Page Connector)	 	X	 
pozadavek na lek	provedeni obchodu (Process)	 	X	 
pozadavek na vydani leku	sklad (Off-Page Connector)	X	 	 
vydejka leku	leky na sklade (Data Store)	X	 	 

Subprocess zuctovani transakci
	Name:	zuctovani transakci
	Code:	ZUCTOVANI_TRANSAKCI
	Label:	
	Number:	1.2.3
	Lowest Level:	Yes

Process Description
pozn. měl by obsahovat i rozhraní pro inicializaci a naplnění datastoru "trzby a prispevky"
Process Specification
pokud přijde "info o prodeji":

"info o prodeji_out.ID" přiřaď "vygeneruj jedinečné ID"
"info o prodeji_out.doplatky" přiřaď "info o prodeji_in.doplatek"
"info o prodeji_out.prispevky" přiřaď "info o prodeji_in.prispevek"
"info o prodeji_out.datum" přiřaď "vygeneruj datum"

pokud je konec prodejního dne:

"vyuctovani za leky.castka" přiřaď SUM(prispevky)
"trzby.castka" přiřaď SUM(doplatky)
Process Reference List
Connected via	Connected to	Src	Dst	 
denni statistiky	trzby a prispevky (Data Store)	 	X	 
info o prodeji in	provedeni obchodu (Process)	 	X	 
info o prodeji out	trzby a prispevky (Data Store)	X	 	 
trzby	Banka (External Entity)	X	 	 
vyuctovani za leky	Zdravotni pojistovny (External Entity)	X	 	 

Subprocess sklad
Graph

Subprocess aktualizace skladovych karet
	Name:	aktualizace skladovych karet
	Code:	AKTUALIZACE_SKLADOVYCH_KARET
	Label:	
	Number:	1.3.2
	Lowest Level:	Yes

Process Reference List
Connected via	Connected to	Src	Dst	 
dodavky leku na sklad	evidence dokladu (Off-Page Connector)	 	X	 
pokladni doklady	prodej (Off-Page Connector)	 	X	 
upozorneni na dodavku leku na sklad	kontrola stavu zasob (Process)	X	 	 
vydejka a pokladni doklad	evidence dokladu (Off-Page Connector)	X	 	 

Subprocess kontrola stavu zasob
	Name:	kontrola stavu zasob
	Code:	KONTROLA_STAVU_ZASOB
	Label:	
	Number:	1.3.1
	Lowest Level:	Yes

Process Specification
pokud přijde "požadavek na vydání léku," čti "info o zásobách," pokud:

-lék je na skladě=ANO: then odešli "potvrzeni o vyskladnění léku.uspech" =ANO
a potom pokud "info o zasobach.pocet kusu" < 20 then odešli "objednavky.pocet kusu" k dodavateli na 20ks

-lék na skladě=NE: then odešli "potvrzení o vyskladnění léku.uspech" =NE (nedostupny)
Process Reference List
Connected via	Connected to	Src	Dst	 
info o zasobach	leky na sklade (Data Store)	 	X	 
objednavky	Dodavatele (External Entity)	X	 	 
potvrzeni o vyskladneni leku	prodej (Off-Page Connector)	X	 	 
pozadavek na vydani leku	prodej (Off-Page Connector)	 	X	 
prijemka leku	leky na sklade (Data Store)	X	 	 
upozorneni na dodavku leku na sklad	aktualizace skladovych karet (Process)	 	X	 

CRUD Matice

ERD – Entitně relační diagram

tabulky:
•	CREATE TABLE tpohlavi (id number(1) PRIMARY KEY, nazev varchar2(4))
•	CREATE TABLE tkraje (id number(2) PRIMARY KEY, nazev varchar2(20))
•	CREATE TABLE tmesta (id number(3) PRIMARY KEY, nazev varchar2(20), kraj REFERENCES tkraje(id))
•	CREATE TABLE tpojistovny (id number(10) PRIMARY KEY, nazev varchar2(30), ulice varchar2(25), cislo_popisne number(4), telefon number(12), mesto REFERENCES tmesta(id))
•	CREATE TABLE tpacienti (id number(10) PRIMARY KEY, jmeno varchar2(15), prijmeni varchar2(15) NOT NULL, telefon number(12) UNIQUE, vek number(3) CHECK(vek>0), pohlavi REFERENCES tpohlavi(id), pojistovna REFERENCES tpojistovny(id) NOT NULL)
•	CREATE TABLE tleky (id number(10) PRIMARY KEY, nazev varchar2(15) UNIQUE, cena number(10) CHECK(cena>0), prispevek number(10) CHECK(prispevek>=0), volne_dostupny number(1))
•	CREATE TABLE tdodavatele (id number(10) PRIMARY KEY, nazev varchar2(25), ulice varchar2(15), cislo_popisne number(4), telefon number(12), mesto REFERENCES tmesta(id))
•	CREATE TABLE tkoupili (id number(10) PRIMARY KEY, datum date, pacienti REFERENCES tpacienti(id), leky REFERENCES tleky(id), pocet_kusu number(4))
•	CREATE TABLE tdodavaji (leky REFERENCES tleky(id), dodavatele REFERENCES tdodavatele(id))
•	CREATE TABLE thradi (leky REFERENCES tleky(id), pojistovny REFERENCES tpojistovny(id))
sekvence:
•	create sequence tkraje_seq
•	create sequence tmesta_seq
•	create sequence tpojistovny_seq
•	create sequence tpacienti_seq
•	create sequence tleky_seq
•	create sequence tdodavatele_seq
•	create sequence tkoupili_seq
triggery k tabulkám:
•	CREATE OR REPLACE TRIGGER tpacienti_trigger BEFORE DELETE
ON tpacienti FOR EACH ROW BEGIN
DELETE FROM tkoupili WHERE tkoupili.pacienti = :old.id;
END;
•	CREATE OR REPLACE TRIGGER tdodavatele_trigger BEFORE DELETE
ON tdodavatele FOR EACH ROW BEGIN
DELETE FROM tdodavaji WHERE tdodavaji.dodavatele = :old.id;
END; 
•	CREATE OR REPLACE TRIGGER tpohlavi_upd BEFORE INSERT
ON tpohlavi BEGIN
aise_application_error(-20101,'Nad tabulkou tpohlavi je zakazan update');
END; 

Závěr
V tomto projektu jsem si vyzkoušel namodelovat a v trošku jiném provedení i realizovat IS pro automatizaci chodu lékárny. Výsledky modelování v CASE nástroji Power Designer jsou obsahem této práce, návrh ERD je převzat z mého projektu do Databázových systémů, kde jsem se pokusil prakticky realizovat návrh IS z tohoto dokumentu. Při realizaci jsem pochopitelně musel některé věci změnit či úplně vypustit, nicméně výsledky mého snažení lze najít na adrese http://akela.mendelu.cz/~xsuman/dbs a lze jej korektně prohlížet libovolným browserem založeným na jádře Gecko jako jsou Mozilla či Firefox.