Firma Hippokrates vyrába systém pre zdravotnícke zariadenia.

Pacienti volajú na recepciu, aby si dohodli termín návštevy lekára konkrétnej špecializácie.
V zdravotníckom zariadení pôsobí pre každú špecializáciu (chirurg, internista, alergológ, psychológ) jeden či viacero lekárov, ktorí sú v špecializácii vzájomne zastupiteľní (napr. 2 chirurgovia, 3 internistky, 1 alergologička, 1 psychológ a pod.). Každý z nich má dostupné termíny, keď dokáže prijať pacienta — napr. chirurgička MUDr. Horváthová má najbližší voľný termín 7. 11. 2023 o 15:00 na 30 minút.

Navrhnite informačný systém, ktorý poskytuje nasledovné služby:

  1. Rezervácia termínu u lekára či lekárky v konkrétnej špecializácii na konkrétny dátum a čas. Vstupom je rodné číslo pacienta a číselný kód špecializácie a stručný popis ťažkostí. Výstupom je zoznam troch najbližších dostupných termínov spolu s identifikátormi a menami lekára či lekárky, ktorý/-á je k dispozícii.
  2. Potvrdenie termínu rezervácie. Vstupom je rodné číslo pacienta a identifikátor termínu. Výstupom je informačné potvrdenie s rodným číslom pacienta, dátum a čas termínu a menom lekára či lekárky.
  3. Návšteva pacienta na potvrdenom termíne u konkrétneho lekára. Vstupom je rodné číslo pacienta a identifikátor termínu. Výstupom je textová záverečná správa o nášteve.
  4. Výpis kalendára na daný týždeň pre konkrétneho lekára či lekárky. Vo výstupe je zoznam termínov s rodnými číslami pacientov, s indikátorom potvrdenosti termínu (potvrdený či nepotvrdený) a s dňom, dátumom a časom termínu.
  5. Prehľad vyťaženosti lekárov. Vo výstupe je zoznam identifikátorov lekárov či lekáriek, začiatočný dátum a čas, koncový dátum a čas, a počet potvrdených termínov pacientov v danom časovom intervale.

Varianty zadania

Vyberte si jeden z variantov zadania a implementujte ho úplne. Zadanie, ktoré nespĺňa všetky požiadavky vo vybranej možnosti, bude zamietnuté. Pri zadaní sa hodnotí kvalita a spôsob implementácie.

I. SOAP webservice (od kódu k WSDL)

Implementujte SOAP webservice v štýle document/literal so všetkými vyššie uvedenými požiadavkami. Zverejnite WSDL so službou a vytvorte k nej klienta v ľubovoľnej technológii, pričom odporúčame použiť JAX-WS 2.0. Demonštrujte funkčnosť servera i klienta — odporúčaná forma sú unit testy.

II. SOAP webservice (od WSDL ku kódu)

Vytvorte ručne WSDL, ktoré popisuje ľubovoľnú jednu z vyššie uvedenú požiadaviek. Na základe tohto WSDL implementujte serverovskú a klientskú časť pre túto operáciu v ľubovoľnej technológii. Použite ľubovoľný štýl (i keď odporúčame document/literal). Demonštrujte funkčnosť servera i klienta — odporúčaná forma sú unit testy.

III. Akka aktor

Navrhnite a implementujte aktorov pre požiadavku 1. („rezervácia“), 3. („návšteva“) a 4. („výpis kalendára“).
Predpokladajte, že každý rezervovaný termín z požiadavky 1. je automaticky potvrdený.

IV. Message Broker: RabbitMQ alebo Kafka

Vyberte si jeden broker — buď RabbitMQ alebo Kafka — a implementujte zadanie, ktoré podporuje požiadavky 1. („rezervácia“), 3. („návšteva“) a 4. („výpis kalendára“).

Považujte to za asynchróonne operácie a výstupy z operácie posielajte do konkrétnych exchangeov alebo topicov, ktoré ich budú zbierať a dávať k dispozícii na konzumáciu.

Ujasnenia

  • Pri distribuovanom programe nie je nutné vytvárať žiadne grafické rozhranie (GUI). Funkčnosť overte ideálne pomocou unit testov.