dokumendiregister.ee
OtsingAsutusedMCP
Otsing›Kultuuriministeerium
Sissetulev kiriAvalik

Kiri

Kultuuriministeerium · 21. jaanuar 2026
Viit
13-5/34-3
Registreeritud
21. jaanuar 2026
Dokumendi liik
Sissetulev kiri
Adressaat
Eesti Rahvusraamatukogu
Saabumis/saatmisviis
e-post/DVK
Funktsioon
13 VÄLISABI JA EUROOPA LIIDU TOETUSTE PROGRAMMIDE KORRALDAMINE (2021-2027)
Sari
13-5 Valdkondlike digipöörete toetamine
Toimik
13-5 Valdkondlike digipöörete toetamine
Vastutaja
Kristiin Meos (KULTUURIMINISTEERIUM, Kultuuriväärtuste osakond)

Failid

  • 📎13-5-34-1 RARA RP007 Toetuse maksetaotluse andmed 2025 IV.asice3092 KB

Sisu (failidest)

ARVE Dokumendi number: TLL45200150 AS PricewaterhouseCoopers Advi- Dokumendi kuupäev: 13-11-2025 sors Tähtaeg: 27-11-2025 Tarnija Klient AS PricewaterhouseCoopers Advisors Eesti Rahvusraamatukogu Tatari 1 Endla tn 3 // Tõnismägi 2 10116 Tallinn 15189 Kesklinna linnaosa, Tallinn, Harju Eesti maakond Eesti KMKR nr: EE100066287 Registrikood: 10325507 KMKR nr: EE100179475 Registrikood: 74000139 Makse andmed Summa: Tähtaeg: Pangakonto: BIC: 27-11-2025 EE912200221002156760 HABAEE2X 67.952,00 EUR E-arve operaator Unifiedpost Kommentaarid ++ Kommentaarid: Lugupeetud/For attention of Anneli Nappus ++ Kirjeldus Kogus Ühik Ühiku hind KM % Summa KM-ta (EUR) Raamatukogude sündmus-, proaktiivse- 1 Ühik 54.800,00 24,0% 54.800,00 ja nõusolekuteenuse ärianalüüs. Hanke viitenumber: 292286. Summa KM-ta 54.800,00 EUR KM 13.152,00 EUR KM 24,0% summast 54.800,00 EUR = 13.152,00 EUR Kogusumma: 67.952,00 EUR AS PricewaterhouseCoopers Advisors, Tatari 1, 10116, Tallinn, Eesti KMKR nr: EE100066287, Registrikood: 10325507 1/1 DFC_SuppRegCode:"10325507" DFC_SuppVATNumber:"" DFC_SuppAccount:"EE912200221002156760" DFC_EBillAdrType:"Tp_" DFC_EBillAdr:"74000139" DFC_EBill:"Unifiedpost" DFC_EBillCode:"eEAb" DFC_OwnerIk:"74000139" DFC_ProxyID:"" DFC_TypeOfSource:"S-Arved" DFC_AdrINX:"DSTREAM" DFC_GlobInvID:"EMK_2025_280204782" DFC_PRN:"" DFC_PayerUtilityNumber:"74000139" DFC_DueDate:"2025-11-27" DFC_InvoiceDate:"2025-11-13" DFC_Amount:"67952.00" DFC_CurrencyCode:"EUR" DFC_B2BInvoiceNumber:"TLL45200150" DFC_InvoiceNumber:"TLL45200150" DFC_SYSTEMID:"BANQUP" DFC_DOCTYPENAME:B2BInvoice DFC_NUMFIELDS:21 DFC_BEGINRECORDS Hankija nimi: Eesti Rahvusraamatukogu Riigihanke nimetus ja viitenumber: „Raamatukogude sündmus-, proaktiivse- ja nõusolekuteenuse ärianalüüs“ (292286) HANKELEPING Tallinnas, (lepingu kuupäev digitaalallkirjas) Eesti Rahvusraamatukogu, registrikood 74000139, Tõnismägi 2, 15189 Tallinn, peadirektori Martin Öövel isikus, kes tegutseb seaduse alusel (edaspidi hankija), ja AS PricewaterhouseCoopers Advisors, registrikood 10325507, asukoht Tatari tn 1, 10116 Tallinn, juhatuse liikme Erki Mägi isiksus, kes tegutseb põhikirja alusel (edaspidi töövõtja), edaspidi koos nimetatud pooled, lähtudes asjaoludest, et: - Eesti Rahvusraamatukogu korraldas riigihanke „Raamatukogude sündmus-, proaktiivse- ja nõusolekuteenuse ärianalüüs“ (292286) - hanke käigus tunnistati edukaks AS PricewaterhouseCoopers Advisors poolt esitatud pakkumus nr 557572; sõlmivad hankelepingu (edaspidi Leping) alljärgnevas: 1. Lepingu dokumendid 1.1. Leping koosneb Lepingu põhiosast ja Lepingu lahutamatuteks osadeks olevatest lisadest ja Lepingu muudatustest, milles võidakse kokku leppida pärast Lepingu allkirjastamist. 1.2. Lepingu lisadena kuuluvad Lepingu juurde alljärgnevad dokumendid ning nendes esinevate vastuolude korral tõlgendatakse Lepingu tingimusi vastavalt alljärgnevale tähtsuse järjekorrale: 1.2.1. „Raamatukogude sündmus-, proaktiivse- ja nõusolekuteenuse ärianalüüs“ (292286) tehniline kirjeldus ja muud hanke objekti puudutavad dokumendid koos hankija poolt nende suhtes antud kirjalike selgitustega (asuvad riigihangete registris). 1.2.2. AS PricewaterhouseCoopers Advisors registrikood 10325507 poolt esitatud ja hankija poolt edukaks tunnistatud pakkumus (asub riigihangete registris); 1 1.2.3. Leping; 1.2.4. pärast Lepingu sõlmimist täiendavalt allkirjastatud Lepingu lisad. 1.3. Lepingu tõlgendamisel lähtutakse osapoolte ühisest tegelikust tahtest, isegi kui see erineb sõnade tavapärasest tähendusest. Kui osapoolte ühist tegelikku tahet ei õnnestu kindlaks teha, tuleb Lepingut tõlgendada nii, nagu eriarvamusel oleva osapoolega samasugune mõistlik isik pidi Lepingut samade asjaolude esinemise korral mõistma. 2. Lepingu ese, eesmärk ja töövõtja kinnitused 2.1. Lepingu esemeks on raamatukogu lugejateenuste osutamise ja kasutamise hetkeolukorra ning tulevikuvaate analüüs ja teenuste tulevikukontseptsiooni loomine Lepingu põhiosas ja selle lisades sätestatud tingimustel ja tähtaegadeks (edaspidi töö). 2.2. Lepingu eesmärgiks on määrata kindlaks osapoolte õigused, kohustused, tööde üleandmine, vastuvõtmine, garantii, autoriõigused ja vastutus Lepingu täitmisel. 2.3. Pooled kinnitavad, et ta on Lepinguga tutvunud ning mõistab täielikult enesele võetavate kohustuste sisu ja tagajärgi ning on nõus Lepingus ja selle lisades toodud tingimustega. 2.4. Töövõtja kinnitab, et Lepingu täitmisega ei kahjustata kolmandate isikute õigusi ja huve ning puuduvad mistahes asjaolud, mis välistaksid tema õiguse sõlmida Leping ja seda nõuetekohaselt täita. 3. Töö üldine käik 3.1. Töövõtja kohustub arvestama töö tegemisel hankija arvamuste ja juhistega, v.a juhul, kui see seab ohtu töö vastavuse Lepingu tingimustele. Kui töövõtja leiab, et hankija arvamus või juhis võib seada ohtu töö vastavuse Lepingu tingimustele, peab ta sellest hankijat koheselt kirjalikku taasesitamist võimaldavas vormis teavitama. Vajadusel vormistavad pooled hankija arvamusest ja/või juhisest tuleneda võiva Lepingu tingimus(t)e muudatuse Lepingu lisana, kui see ei ole vastuolus riigihangete seadusega. 3.2. Juhul, kui töövõtjal on vajadus teostada Lepingus kokkulepitud Tööd hankija asukoha ruumides, kohustuvad tööd teostavad töövõtja meeskonnaliikmed järgima hankija asukoha ruumide kasutamise korda, tuleohutusnõudeid ja muid turvalisusega seotud nõudeid ja piiranguid, mida hankija on neile tutvustanud enne Lepingu täitmisele asumist ja/või Lepingu täitmise ajal. 2 3.3. Juhul, kui töövõtja meeskonnaliikmed puutuvad Lepingu täitmise käigus kokku hankija varaga, kohustuvad nad kasutama hankija vara otstarbekohaselt ja heaperemehelikult ning tagama vara kaitstuse ja säilimise. 3.4. Hankijal on õigus igal ajal kontrollida Lepingu eseme vastavust Lepingule, nõuda töövõtjalt informatsiooni Lepingu täitmise kohta. Samuti on töövõtja meeskonnaliikmed kohustatud hankija nõudmisel andma hankijale jooksvalt ülevaate juba teostatud või teostamisel olevate tööde kohta. 3.5. Kui töö tegemise ajal nähtub selgelt, et töövõtja tehtav töö ei vasta Lepingus ja selle lisades kokkulepitud tingimustele, teavitab hankija sellest töövõtjat kirjalikult, näidates ära põhjendatud puudused ja määrates mõistliku tähtaja puuduste tasuta kõrvaldamiseks. Kui töövõtja ei kõrvalda puudusi kirjalikus teates määratud tähtpäevaks, on hankijal õigus Leping ühepoolse kirjaliku ülesütlemisavaldusega üles öelda, teatades sellest teistele osapooltele ette vähemalt 7 (seitse) kalendripäeva ja nõuda põhjendatud kahju hüvitamist. 3.6. Pooled kooskõlastavad omavahel Lepingut puudutavad PR-tegevused (näiteks pressiteated, pressikonverentsid, kriisikommunikatsioon, kliendireferentsid jms) enne nende ellu rakendamist ja avalikkuseni jõudmist. Pooled ei kahjusta Lepingu pinnalt tekkinud erimeelsuste või vaidluste lahendamisel teineteise mainet meedia kaudu. Töövõtja tagab eelnimetatud kohustuse täitmise ka kõikide kolmandatest isikutest teostajate poolt. 4. Töövõtja kohustused Töövõtja kohustub: 4.1. teostama töö lähtuvalt ärianalüüsi, teenusedisaini ja infotehnoloogia parimas praktikas rakendatavatest normidest ja standarditest kvaliteetselt ja efektiivselt, majanduslikult kõige otstarbekamal viisil, vastavuses hankija poolt koostatud riigihanke alusdokumentides kirjeldatud nõuetega ja pidama kinni enda poolt töö teostamise käigus esitatud ja hankija poolt kinnitatud töö teostamise tähtaegadest. Juhul, kui hankijal tekib põhjendatud kahtlus eelnimetatud kohustuste täitmise osas, on hankijal õigus esitada töövõtjale vastavasisuline arupärimine, millele töövõtja peab vastama hiljemalt 3 (kolme) tööpäeva jooksul. Juhul, kui töövõtja põhjendused ei ole hankija jaoks piisavad, on hankijal õigus küsida sõltumatu kolmanda isiku seisukohta; 4.2. Lepingu alusel ja selles kokkulepitud maksumuse eest teostama ka nn sidustöid, mis ei ole Lepingus sõnaselgelt sätestatud, kuid mille teostamine on headest tavadest ja töövõtja ametialasest professionaalsusest lähtudes nõutavad ja/või vajalikud Lepingu esemeks oleva töö teostamiseks. Eelkirjeldatud sidustööde all ei peeta silmas hankijast tulenevat lähteülesande ja töömahu muutmist; 4.3. teatama viivitamatult kirjalikku taasesitamist võimaldavas vormis hankija esindajale kõikidest asjaoludest, mis võivad ohustada Lepingu eseme loomist vastavuses esitatud nõuetele, tööde teostamist või kvaliteeti või põhjustada fikseeritud tähtaegade ületamist, samuti muudest 3 Lepingu täitmist mõjutavatest asjaoludest ja andma omapoolseid soovitusi vigade kõrvaldamiseks; 4.4. teavitama viivitamatult kirjalikku taasesitamist võimaldavas vormis hankija esindajat hankija poolt esitatud informatsiooni ebatäpsusest või esitatud nõuete ebasobivusest ja andma omapoolseid soovitusi puuduste kõrvaldamiseks; 5. Hankija kohustused Hankija kohustub: 5.1. korraldama töövõtjale juurdepääsu töö teostamiseks vajalikule informatsioonile; 5.2. teatama töövõtjale kõikidest planeeritavatest ja/või teadaolevatest muudatustest, mis võivad oluliselt mõjutada töö teostamist; 5.3. pidama kinni töövõtja poolt töö teostamise käigus esitatud ja hankija poolt kinnitatud tähtaegadest; 5.4. kontrollima töövõtja poolt esitatud töö nõuetele vastavust ja nõuetele vastava töö vastu võtma. 5.5. maksma töövõtjale Lepingus kokkulepitud tasu. 6. Lepingu maksumus ja maksetingimused 6.1. Lepinguga kokkulepitud töö kogumaksumus on 54 800 (viiskümmend neli tuhat kaheksasada) eurot, millele lisandub käibemaks (edaspidi tasu). 6.2. Hankija tasub töövõtjale punktis 6.1. sätestatud tasu 1 (ühes) osas peale töö vastuvõtmist. 6.3. Hankija tasub töövõtjale töövõtja poolt esitatud arve alusel 14 (neljateistkümne) kalendripäeva jooksul alates arve kättesaamisele järgnevast päevast. Arve esitamise õiguse annab töövõtjale hankija poolt allkirjastatud töö üleandmise-vastuvõtmise akt. 6.4. Töövõtja esitab hankijale Eesti e-arve standardile vastavad e-arved. E-arve tuleb esitada hankija e-arve operaatori (Unifiedpost AS) ostuarvete halduskeskkonda. E-arves peab lisaks standardis nimetatud andmetele olema toodud ka hankija kontaktisiku ees- ja perekonnanimi. 7. Töö teostamise aeg, töö üleandmine ja vastuvõtmine 7.1. Töö teostatakse ajavahemikul 02. juuni 2025 kuni 31. oktoober 2025.a. 4 7.2. Töö vastuvõtmine hankija poolt toimub üleandmise-vastuvõtmise akti alusel. 7.3. Töövõtja esitab hankijale teostatud töö koos tema poolt digitaalselt allkirjastatud töö üleandmise-vastuvõtmise aktiga. 7.4. Puuduste mitteavastamisel tagastab hankija töövõtjale digitaalselt allkirjastatud akti 15 (viieteistkümne) tööpäeva jooksul akti saamisele järgnevast päevast. Töö loetakse vastuvõetuks alates hankija poolt akti allkirjastamisest. Hankija poolt allkirjastab akti lepingu punktis 13.1.1. nimetatud esindaja. 7.5. Juhul, kui töö üle vaatamisel leiab hankija töös (k.a parandatud tööde üleandmisel) puudusi, esitab hankija töövõtjale punktis 7.4. nimetatud tähtaja jooksul kirjaliku põhjenduse puudustega töö vastuvõtmisest keeldumise kohta. Juhul, kui hankija on pidanud sama viga või puudust üle vaatama rohkem, kui kaks korda, siis on hankijal õigus nõuda töövõtjalt üle vaatamisega seotud kulutuste ja kahju hüvitamist. Hankijal on õigus eelnimetatud kulutused ja kahjusummad kinni pidada töövõtjale välja makstavast tasust. 7.6. Töövõtja kohustub töös esinevad puudused parandama oma kulul hankijaga eelnevalt kooskõlastatud tähtajaks. Parandatud tööd annab töövõtja hankijale üle punktis 7.4. sätestatud korra kohaselt. Kui töövõtja leiab, et hankija esitatud pretensioon on alusetu, esitab ta hankijale kirjalikult põhjendatud vastuväite. 7.7. Juhul, kui hankija punktis 7.4. fikseeritud tähtaja jooksul töö üleandmise-vastuvõtmise akti allkirjastatult ei tagasta, ega esita ka motiveeritud põhjendust töö vastuvõtmisest keeldumise kohta seoses töös esinevate oluliste puudustega, loetakse töö hankija poolt vastuvõetuks punktis 7.4. sätestatud ajast ning töövõtjal on õigus kokkulepitud tasule. 7.8. Töö juhusliku hävimise või kahjustumise riisiko läheb töövõtjalt hankijale üle töö vastuvõtmisel hankija poolt. Kui töö sisaldab töövõtja poolt hankijale üleantavaid asju, läheb asja omandiõigus töövõtjalt hankijale üle vastavat asja sisaldava töö vastuvõtmise hetkest hankija poolt. 7.9. Hankija poolt töö vastuvõtmine ei vabasta töövõtjat vastutusest üleandmisel-vastuvõtmisel avastamata jäänud vigade ja töö mittenõuetekohasuse eest. Töövõtja parandab ilmnenud vead omal kulul lähtudes Lepinguga kokkulepitud garantii tingimustest. 7.10. Töövõtja annab hankijale koos üleandmise-vastuvõtmise aktiga üle Lepingu eseme juurde kuuluvad dokumendid elektroonilises vormis. Dokumentide edastamise asukoha/andmekandja lepivad töövõtja ja hankija kokku vahetult enne dokumentide üle andmist. 8. Poolte vastutus ja rikkumise vabandatavus 8.1. Pooled vastutavad oma Lepinguliste kohustuste rikkumise eest seaduses ja Lepingus sätestatud korras. Töövõtja vastutab ka Lepingu rikkumise eest, mis tuleneb poole poolt tööde teostamisele kaasatud alltöövõtjate tegevusest/tegevusetusest. 5 8.2. Oluliseks lepingurikkumiseks loetakse lisaks VÕS § 116 lõikes 2 nimetatule ka garantiiperioodil töövõtja poolsete lepinguliste kohustuste rikkumist, töövõtja viivitust tööde või selle osades üleandmisega rohkem kui 30 (kolmkümmend) kalendripäeva ja hankija viivitust vastuvõetud tööde või selle osade eest tasumisega rohkem kui 30 (kolmkümmend) kalendripäeva. 8.3. Poolte rahaline koguvastutus on piiratud Lepingu kogumaksumusega, väljaarvatud juhul, kui on tõendatud poole tahtlik Lepingu rikkumine. 8.4. Pooled ei vastuta kohustuse rikkumise eest kui rikkumine on tingitud Lepinguga mitteseotud kolmandate isikute tegevusest või tegevusetusest ning juhul, kui rikkumine on tingitud vääramatu jõu asjaolust võlaõigusseaduse tähenduses ja pool teavitab mainitud asjaolust kohe kirjalikult teist poolt. 8.5. Kui kohustuse rikkumist tingiv vääramatu jõu asjaolu kestab kauem kui 2 (kaks) kuud, on kummalgi poolel õigus Leping ülesütlemisavalduse alusel üles öelda, teatades sellest teisele poolele ette vähemalt 7 (seitse) kalendripäeva. 8.6. Lepingut rikkunud pool kohustub hüvitama kannatanud poolele Lepingu rikkumisega või lepingu ülesütlemisega tekitatud varalise kahju. Varaliseks kahjuks loevad pooled ka õigusabikulusid, kulusid ekspertidele, kulusid võlgnevuste sissenõudmisele ja muid seesuguseid kulusid. 8.7. Hankijal on õigus nõuda ja töövõtja on nõude saamisel kohustatud tasuma hankijale leppetrahvi 0,2 % (null koma kaks) protsenti Lepingu kogumaksumusest (koos käibemaksuga) iga üleandmisega viivitatud kalendripäeva eest, kuid mitte rohkem kui 30% Lepingu kogumaksumusest, kui töövõtja ei anna hankijale tööd üle töö üleandmise lõpptähtajaks. 8.8. Juhul, kui hankija viivitab vastuvõetud töö eest tasu maksmisega, kohustub ta töövõtja kirjalikul nõudel maksma iga viivitatud kalendripäeva eest viivist 0,2% (null koma kaks) protsenti Lepingu kogumaksumusest (koos käibemaksuga), kuid mitte rohkem, kui 30% Lepingu kogumaksumusest. 8.9. Punktides 8.7. ja 8.8. nimetatud leppetrahvi või viivise nõude peab selleks õigustatud pool esitama hiljemalt 3 (kolme) kuu jooksul nõudeõiguse tekkimisest, mis leppetrahvi puhul algab töö üleandmise tähtajale järgnevast päevast ja viivise puhul lepingu punktis 6.3. sätestatud tähtaja saabumisele järgnevast päevast. Hankijal on õigus töövõtjale makstavat tasu vähendada leppetrahvi summa võrra. 8.10. Töövõtja on kohustatud tasuma hankijale leppetrahvi 0,2 % (null koma kaks) protsenti Lepingu kogumaksumusest iga rikkumise korral, kui töövõtja ei täida garantiiperioodil Lepingust tulenevaid kohustusi. 9. Garantii 6 9.1. Töövõtja annab kogu üle antud töö tulemile garantii. Garantiitähtaja pikkus on 6 (kuus) kuud. Garantiitähtaeg hakkab kehtima hankija poolt töö lõpliku üleandmise-vastuvõtmise akti allkirjastamisele järgnevast päevast. 9.2. Kui teostatava töö tulem hõlmab lisaks töövõtja poolt loodud tulemile ka kolmanda isiku poolt loodud tulemit, siis laieneb töövõtja garantii ka kolmanda isiku poolt loodud tulemile. 9.3. Garantiiperioodil töös ilmnevad ja töö Lepingu tingimustele mittevastavuse kaasa toovad puudused kõrvaldab töövõtja oma kulul 30 (kolmekümne) kalendripäeva jooksul. Puuduseks peetakse töö mittevastavust riigihanke alusdokumentidele, samuti töös esinevaid vastuvõetamatuid asjaolusid, mida töövõtja sai või oleks pidanud ennetavalt ette nägema vastavalt hanke objektiga seotud vajalike kompetentsi nõuete suhtes. Kui töös ilmnevad puudused on tingitud teostatud töö tulemis sisalduva kolmanda isiku poolt loodud lahendusest (selle muutmine, vigade ilmnemine jmt), siis on töövõtja kohustatud garantiiperioodil kõrvaldama või organiseerima ka selliste puuduste kõrvaldamise. 10. Konfidentsiaalsus 10.1. Pooled kohustuvad mitte avalikustama kolmandatele isikutele Lepingu sisu ja tingimusi ning muud lepingu alusel saadud konfidentsiaalset informatsiooni, mis on seotud osapoolte tegevusega ning mida pooled või ükskõik milline osapoolte selleks volitatud isik otseselt või kaudselt, suuliselt või kirjalikult, enne või pärast Lepingu sõlmimist teiselt osapoolelt või ükskõik milliselt tema poolt selleks volitatud isikult saanud, välja arvatud informatsioon, mis on vabalt kättesaadav avalikke kanaleid kasutades või mille avalikustamise nõue tuleneb õigusaktidest. Lisaks eeltoodule võivad pooled avaldada Lepingu sisu ja tingimusi ning muud Lepingu alusel saadud konfidentsiaalset informatsiooni osapoolte õigusnõustajatele, pankadele, audiitoritele ja kindlustusandjatele ning lisaks töövõtja poolt teistele töövõtja ülemaailmsesse võrgustikku kuuluvatele juriidilistele isikutele või seltsingutele, alltöövõtjatele või teenusepakkujatele, kes on seotud konfidentsiaalsuskohustusega. 10.2. Pooled informeerivad lepingu punkti 10.1. sisust iga oma töötajat, kes võivad tööülesannetest tulenevalt konfidentsiaalse informatsiooniga kokku puutuda. 11. Intellektuaalse omandi õigused 11.1. Lepingu alusel loodud töö omandiõigus ning autori varalised õigused antakse õiguste kogumina peale töö eest täielikku tasumist üle hankijale kogu autoriõiguse kehtivuse tähtajaks ilma territoriaalsete piiranguteta. Kõik tasud autori varaliste õiguste loovutamise ja autori isiklike õiguste kasutamise eest sisalduvad Lepingu maksumuses. 7 11.2. Töövõtja annab hankijale ainulitsentsi kõigi autori isiklikke õiguste kasutamise kohta, sealhulgas autoriõigusega kaitstavat tööd oma vajadustest muuta, täiendada ja/või edasi arendada ilma töövõtja (autori) nõusolekuta. 11.3. Varaliste õiguste üleandmisel (loovutamisel) ei sea töövõtja hankijale mingeid piirangud, sh isiklike õiguste litsentseerimise ja edasiloovutamise (all-litsents), kasutamise eesmärgi, tähtaja, kasutamise territooriumi, ulatuse, viisi ja vahendite osas. 11.4. Töövõtja informeerib hankijat kõikidest autoriõigusega seotud piirangutest, mis on seotud töös kasutatavate kolmandate isikute poolt loodud materjalidega. Kui hankija annab töövõtjale töö või selle osa teostamiseks mistahes materjale, vastutab hankija nende materjalide osas materjalide sisulise õigsuse ning vajalike autori- ja muude õiguste olemasolu eest. 11.5. Kui hankija kasutab tööd viisil, mis toob kaasa töö või selle osade olulises mahus töötlemise, siis peab hankija töövõtjale kui töö autorile viitamise eelnevalt töövõtjaga kooskõlastama. 12. Lepingu jõustumine, muutmine ja lõppemine 12.1. Leping jõustub, kui poolte esindajad on sellele allkirjastanud. 12.2. Lepingut võib muuta poolte kirjalikul kokkuleppel riigihangete seaduse § 123 lõikes 1 sätestatud tingimustel ja korras. 12.3. Leping lõppeb lepinguliste kohustuste täitmisel, poolte kokkuleppel, ühepoolsel lõpetamisel Lepingus nimetatud alusel või muul seaduses nimetatud alusel. 12.4. Hankijal või töövõtjal on õigus lõpetada Leping ennetähtaegselt ühepoolselt alljärgnevatel juhtudel: 12.4.1. teise poole likvideerimisel või pankrotistumisel; 12.4.2. teine pool rikub oluliselt Lepinguga endale võetud kohustusi ja ei lõpeta rikkumist pärast kohustuse rikkumise lõpetamiseks määratud mõistliku tähtaja tulemusteta lõppemist. 12.5. Hankijal on õigus Leping igal ajal sõltumata põhjusest üles öelda, teatades sellest töövõtjale kirjalikku taasesitamist võimaldavas vormis ette vähemalt 7 (seitse) kalendripäeva. Sellisel juhul maksab hankija töövõtjale Lepingu ülesütlemise momendiks faktiliselt tehtud tööde eest. Nimetatud ülesütlemisel annab töövõtja hankijale üle ülesütlemise momendiks faktiliselt tehtud tööd. Nimetatud töödele laienevad kõik lepingus ja selle lisades sätestatud tingimused. 13. Lõppsätted 8 13.1. Lepingu täitmisega seotud teabe vahetamine, nõuete ja dokumentide edastamine toimub kirjalikus või kirjalikku taasesitamist võimaldavas vormis Lepingus sätestatud esindajate kontaktandmete kaudu. Pool, kelle esindaja või kontaktandmed muutuvad, kohustub sellest teisi osapooli kohe teavitama. 13.1.1. Hankija esindaja on: Anneli Nappus, tel: 501 9272, e-post: [email protected] 13.1.2. Töövõtja esindaja on: Tarmo Meresmaa, tel: 5819 3443, e-post: [email protected] 13.2. Lepingust tulenevad vaidlused lahendatakse poolte kokkuleppel. Vaidluste mittesaavutamisel lahendatakse vaidlus Harju Maakohtus. 13.3. Leping on sõlmitud digitaalselt. Hankija: Töövõtja: Eesti Rahvusraamatukogu AS PricewaterhouseCoopers Advisors e-post: [email protected] e-post: [email protected] telefon: 630 7502 telefon: 614 1800 /allkirjastatud digitaalselt/ /allkirjastatud digitaalselt/ Martin Öövel Erki Mägi peadirektor juhatuse liige 9 RAHVUSRAAMATUKOGU RAAMATUKOGUDE TEHNOLOOGILINE PROFIIL 2025-1 Käesolev dokument on Rahvusraamatukogu (RaRa) raamatukogude mittefunktsionaalsete nõuete (MFN) lahutamatu osa. Dokument sätestab RaRa raamatukogude tehnoloogilise profiili. Tehnoloogilise profiili eesmärk on anda ülevaade tehnoloogiatest, programmeerimiskeeltest, raamistikest ja muudest komponentidest, mis on heade referentsidega omavad selget potentsiaali ning on kindlad ja läbiproovitud vahendid. Loodava lahenduse realiseerimise käigus tekkivad muudatused infrastruktuurses lahenduses ja paigaldamise skeemis peavad olema edastatud hankija infrastruktuuriga tegelevale personalile ajavaruga, mis tagab muudatuste hankijapoolse õigeaegse elluviimise. Konkreetne muudatuste tegemiseks vajalik aeg lepitakse kokku arenduse käigus. Märkus: Allolevates tabelites on tehnilised lahendust välja toodud eelistuse järjekorras. Järjekorras eelistatuima lahenduse mittekasutamist tuleb põhjendada. Kõikide tarkvarade puhul tuleb kasutada viimast stabiilset versiooni. Kolmandate teekide, pistikprogrammide ja laienduste kaasamiseks tuleb need tellijaga kooskõlastada. Kõikide kolmandate osapoolte teekide (libraries), pistikprogrammide (plugins) ja laienduste (extensions) kasutamine peab olema eesmärgi- ja vajaduspõhine. Nende komponentide valimisel ja juurutamisel tuleb tagada, et rünnakuvektor (attack surface) hoitakse minimaalsena, et maandada võimalikke turvariske ja ka liiaseid sõltuvusi. Infrastruktuur Komponent Tehnilised Lisainfo lahendus SMTP teenus Kasutusel on standardne SMTP teenus. LDAP teenus Kasutusel on standardne Active Directory teenus. Kasutusel on keskne tulemüüri lahendus, mis toetab kõiki vajalikke funktsionaalsusi. Tulemüür Üldine suunis tulemüüri konfigureerimisel on hoida lahtiste portide arv minimaalsena. Versioonihaldus GIT Koodivaramu.eesti.ee Zabbix https://www.zabbix.com/ Monitooring Serverite infrastruktuuri poole monitooring Prometheus Zabbix’iga ja rakenduse seire Prometheus'iga. http://www.jfrog.com/home/ Komponentide Artifactory repositoorium Open Source Artifactory Open Source toimib lüüsina avalike komponentide repositooriumite (nt Maven Central) ja loodava lahenduse vahel. 1 Rakendused peavad Docker https://www.docker.com/ asuma konteinerites Konteinerite haldus Kubernetes https://kubernetes.io/ Helm Objektide hoidla, sh S3 failihoidla Logihaldus Rakenduse logide formaat peab olema kooskõlastatud, arenduse käigus. Andmevahetusformaat JSON REST API-dele Eelistatud on JSON. XML Pilv Pilvepaindlikus Andmebaasiserver Valdkond Tehnoloogia Lisainfo PostgreSQL http://www.postgresql.org/ MySQL http://www.mysql.com/ mongoDB Neo4j https://www.mongodb.com https://neo4j.com Database https://www.yugabyte.com Andmebaasi platvorm yugabyteDB Andmebaasi klaster Vastavalt Vastavalt andmemahule, kasutajate ja vajadusele päringute arvule. Andmebaasi muudatuste LiquiBase haldus Flyway Veebiserver Valdkond Tehnoloogia Lisainfo Veebiserver Apache HTTP Server Eelistatud on NGINX. NGINX http://httpd.apache.org https://www.nginx.com/ 2 HTML Javascript CSS Kasutajaliides OpenLayers http://openlayers.org/ Veebikaardid Leaflet http://leafletjs.com/ Java tehnoloogiad Valdkond Tehnoloogia Lisainfo OpenJDK Platvorm https://adoptopenjdk.net AdoptOpenJDK http://tomcat.apache.org/ Juhul, kui loodav lahendus nõuab Java EE Rakendusserver Apache Tomcat funktsionaalsuste rakendamist, siis on run-time keskkonnana soovitatav kasutada Oracle poolt sertifitseeritud JavaEE rakendusserverit Apache TomEE (http://tomee.apache.org/). https://spring.io Raamistik Spring Boot Sõltuvuste haldus Spring http://projects.spring.io/spring-framework/ Framework Spring WS https://spring.io/projects/spring-ws Apache Axis2 http://axis.apache.org/axis2/java/core/ Veebiteenused Apache CXF http://cxf.apache.org SLF4J http://www.slf4j.org/ http://logback.qos.ch/ Logimine Spring Security http://projects.spring.io/spring-security/ Turvalisus Apache Shiro http://shiro.apache.org/ 3 Taustaprotsesside Quartz http://quartz-scheduler.org/ automatiseerimine Spring http://projects.spring.io/spring-framework Dokumentide Jasper Reports http://community.jaspersoft.com/project/jasperreports- library genereerimine Eclipse BIRT http://projects.eclipse.org/projects/birt Kasutajaliideste Selenium http://www.seleniumhq.org/ testimine Gatling http://gatling.io/ Koormustestimine Tsung http://tsung.erlang-projects.org/ Komponentide Mockito https://code.google.com/p/mockito/ testimine Junit 5 http://junit.org/ Kompileerimine ja Maven https://maven.apache.org silumine Gradle Javascript tehnoloogiad Valdkond Tehnoloogia Lisainfo Kasutajaliidese Angular raamistik React JS VUE PHP tehnoloogiad Valdkond Tehnoloogia Lisainfo Platvorm PHP https://www.php.net/ Laravel Symphony Phalcon Raamistikud CMS Drupal https://drupal.org/ Wordpress 4 Python tehnoloogiad Valdkond Tehnoloogia Lisainfo Platvorm Python https://www.python.org/ Raamistikud Django https://www.djangoproject.com 5 Õigusanalüüs Soodustatud isikute õigus saada juurdepääs autoriõigusega kaitstud teostele Autoriõiguse seaduse alusel on soodustatud isikutel õigus saada juurdepääs autoriõigusega kaitstud teostele neile ligipääsetaval kujul ilma autori loata. Andmete töötlemise eesmärk on kontrollida isiku õigust seadusest tulenevale erandile, st. veenduda, et teos antakse ligipääsetaval kujul isikule, kellel on seadusest tulenev õigus seda saada. Raamatukogu töötleb andmeid, mis annavad teavet isiku tervisliku seisundi kohta, mis kuuluvad isikuandmete kaitse üldmääruse (IKÜM) artikli 9 lg 1 alusel eriliigiliste isikuandmete hulka.1 Artikkel 4 punkt 15 määratleb terviseandmed kui isikuandmed, mis on seotud inimese füüsilise või vaimse tervisega, sh andmed, mis tekivad tervishoiuteenuste osutamisel ja mis annavad teavet inimese tervisliku seisundi kohta. Koos määruse põhjendusega 35 tähendab see, et terviseandmeteks loetakse kõik isikuandmed, mis annavad teavet inimese varasema, praeguse või tulevase tervisliku seisundi kohta, sh andmed, mis on seotud talle osutatud tervishoiuteenustega. Eriliigiliste isikuandmete töötlemise õigusliku aluse tuvastamine on kahe etapiline: kuna tegemist on isikuandmetega, peab töötleja tuvastama nii aluse vastavalt IKÜM-i artikli 6 lg-le 1 kui ka eriliigiliste andmete töötlemise aluse vastavalt artikli 9 lg-le 2. Kui artikli 6 lõikes 1 sätestatud õiguslikul alusel ei ole vastavat õiguslikku alust artikli 9 lõikes 2 (ja vastupidi), peab vastutav töötleja leidma mõlemast sättest sobiva ja vastastikku täiendava õigusliku aluse, et andmetöötlus oleks seaduslik. Artikkel 6 lg 1 ja artikkel 9 lg 2 õiguslikud alused: • (Selgesõnaline) nõusolek (art 6(1)(a) ja art 9(2)(a)). Andmesubjekti nõusolek peab olema vabatahtlik, konkreetne, teadlik ja ühemõtteline, millega andmesubjekt kas avalduse vormis või selge nõusolekut väljendava tegevusega nõustub tema kohta käivate isikuandmete töötlemisega.2 Eriliigiliste isikuandmete puhul on nõusolekul kõrgem lävend kui artikli 6(1)(a) alusel, kuna nõusolek peab olema “selgesõnaline”. See tähendab, et nõusolekut ei saa eeldada, vaid see peab olema antud üheselt mõistetava ja täpse tahteavaldusega konkreetsel isikuandmete töötlemise eesmärgil. Kuigi RaRa võiks küsida erandit taotlevatelt isikutelt selgesõnalist nõusolekut nende terviseandmete töötlemiseks, ei ole see õiguslik alus sobilik kolmel põhjusel. Esiteks, määruse põhjenduse 43 kohaselt ei tohiks avaliku sektori asutused üldjuhul tugineda andmesubjekti nõusolekule isikuandmete töötlemise õigusliku alusena, sest andmesubjekt võib avaliku sektori 1 IKÜM artikkel 4 lg 15 (terviseandmete definitsioon) 2 IKÜM artikkel 4 lg 11 asutuse suhtes olla ebavõrdses olukorras. Teiseks, seadusega tagatud õiguse realiseerimine ei tohiks tugineda andmesubjekti nõusolekule. Autoriõiguse seadus (AutÕS) annab soodustatud isikule õiguse saada neid teoseid ligipääsetavas vormis ning volitab RaRa-d kui pädevat asutust seda õigust teostama. Korrektsem õiguslik alus sellise teenuse osutamisele on artikkel 6(1)(e) (avalikes huvides olev ülesanne) või artikkel 6(1)(c)(seadusjärgse kohustuse täitmine), mis tuleneb Eesti Rahvusraamatukogu seaduse (ERRS) § 7 lg-st 4 (soodustatud isikute andmete töötlemine). Isegi kui andmesubjekti nõusolek täidaks kõik eelnevalt välja toodud määruse kriteeriumid, muutuks seaduses sätestatud õiguse teostamine faktiliselt tingimuslikuks (“ligipääs, kui annad nõusoleku”), mis on vastuolus seaduse eesmärgiga. Kolmandaks, nõusoleku vabatahtlikkus väljendub andmesubjekti õiguses see igal ajal tagasi võtta, mistõttu ei sobiks see ligipääsu rajamise põhiliseks aluseks.3 Vabatahtlikkuse olemus on reaalne valikuvabadus ilma negatiivsete tagajärgedeta. Kui isik keeldub registripäringu nõusolekust, peab tal jääma sisuliselt samaväärne alternatiiv (näiteks ühekorra digitaalse tõendi esitamine, kehtivuse perioodiline uuendamine ilma lisatõkenditeta). Niipea, kui keeldumise hind on märkimisväärne (nt korduv bürokraatia, viivitused, vähem funktsionaalsust), pole nõusolek enam „vaba.“ RaRa kui vastutav töötleja peab andma andmesubjektile sel puhul teavet selle kohta, et andmesubjekt võib nõusoleku igal ajal tagasi võtta.4 Rajades terviseandmete töötlemise andmesubjekti nõusolekule, võib tekkida olukord, kus isik säilitab seadusliku õiguse ligipääsuks, kuid raamatukogul puudub pärast nõusoleku tagasivõttu andmesubjekti puude liiki ja staatust kontrollida. • Lepingu täitmine (art. 6(1)(b)). Kuigi RaRa ja soodustatud isiku vahel sõlmitakse leping, on teenuse eesmärk tagada ligipääs RaRa kogus olevatele teavikutele. Tavaliselt on raamatukoguteenus puudega isikule üldtingimustel kättesaadav, ning puude tuvastamine ei ole kõigi teenuste puhul vältimatult vajalik lepingu täitmiseks. AutÕS’ist tulenev õigus pole tavalise lepingu osa, vaid erisus, mistõttu ei ole lepingu täitmise alus siin sobivaks õiguslikuks aluseks. • Seadusjärgse kohustuse täitmine (art. 6(1)(c)). IKÜM sätestab, et juriidiline kohustus ei hõlma ainult parlamendi vastuvõetud seadusandlikku akti, vaid võib põhineda ka teisestel õigusaktidel. Vastav seadusjärgne kohustus peab olema aga selge ja täpne ning selle kohaldamine peaks olema eeldatav selle kohaldamisalasse kuuluvatele isikutele.5 Vastutaval töötlejal ei tohi olla sisulist kaalutlusruumi ning säte kohaldub ainult siis, kui seadus nõuab konkreetset töötlust, järgides seejuures vajalikkuse ja proportsionaalsuse põhimõtteid.6 3 IKÜM artikkel 7 lg 3; 4 IKÜM arts. 13(2)(c) and 14(2)(d) 5 IKÜM Põhjendus 41 6 WP 2014 [link] o AutÕS § 252 lg (2) alusel on soodustatud isikutel õigus saada juurdepääs autoriõigusega kaitstud teosele soodustatud isikule ligipääsetavas vormis. Lõikes 4 on sätestatud, et pädevad asutused, kes sellist ligipääsu peavad võimaldama, on mh valitsusasutuse hallatav riigiasutus, kes mittetulunduslikel alustel pakub soodustatud isikutele haridust, väljaõpet, kohandatud lugemist või juurdepääsu teabele. Selline määratlus hõlmab ka RaRa-d kui avalik-õiguslikku asutust, kes võib tegutseda nimetatud erandi raames. AutÕS § 254 lg 1 punkt 1 kohustab RaRa’d kui pädevat üksust tagama, et ta levitab või teeb kättesaadavaks teose koopiat vaid selleks, et võimaldada sellele juurdepääs mh soodustatud isikule. IKÜM kohaselt peab vastav liikmesriigi õigus mh sisaldama eesmärgi piirangut ning olema proportsionaalne taotletava õiguspärase eesmärgiga.7 Esiteks, § 254 lg 3 sätestab täpse ning piiritletud terviseandmete töötluse eesmärgi, tuvastamaks isik seaduse § 252 lg-e 2 tähenduses, mille alusel tagatakse puudega inimestele juurdepääs teavikutele neile ligipääsetavas vormis ilma autoritasuta ning vastavalt erandi tingimustele. Teiseks, selleks, et AutÕS-i alusel oleks soodustatud isikul võimalik erandit kasutada eeldab pädeva asutuse poolt kontrolli, et isik kvalifitseerub. § 252 lg-s 2 sätestatud puude liigi tuvastamiseta puudub õiguslik alus pädeval asutusel teoseid ligipääsetavaks teha seaduses sätestatud moel. Seetõttu on terviseandmete töötlemine funktsionaalselt vajalik osa seaduse alusel. Vastav andmetöötlus peab olema ka proportsionaalne ehk see ei tohi kaugemale minna sellest, mis on eesmärgi saavutamiseks hädavajalik.8 Kuna RaRa piirduks töötlemisel peamiselt soodustusõiguse tõendi esitamise ja kasutajakontole eriõiguse märke lisamisega (jah/ei ning võimalusel kehtivusaeg), kusjuures tõendi sisu pärast eriõiguse lisamist ei säilitata, töödeldakse andmeid minimaalselt ja ainult niivõrd, kuivõrd on vaja spetsiifilist eesmärki täita. RaRa poolt puude kehtivuse kontrolli proportsionaalsust on käsitletud allpool. o ERRS § 7 lg 4 kui lex specialise kohaselt on RaRa-l lubatud töödelda puudega isiku liigi ja kestuse andmeid avalike teenuste osutamiseks. Samuti tuleneb sättest RaRa kui pädeva asutuse kohustus tagada, et ligipääsu erandit kasutavad üksnes soodustatud isikud. Kehtiv sõnastus seostub eriliiki isikuandmete töötlemise eesmärgiga „avalike teenuste osutamine“. ERRS § 6 lg 1 sätestab, et RaRa avalikud teenused on „käesolevast seadusest tulenevad üldkättesaadavad infoteenused, mida osutatakse lugemissaalides, võrguteenustena ja teiste raamatukogude vahendusel.“ Kuigi selle mõiste hulka võib lugeda mh § 4 lg-s 1 loetletud rahvusraamatukogu ülesannetest tulenevad teenused, ei piira „avalike teenuste“ 7 Artikkel 6 lg 3 IKÜM 8 Artikkel 6(3) mõiste kui terviseandmete töötlemise eesmärk konkreetsele funktsioonile nagu AutÕS-ist tuleneva erandi rakendamine, vaid katab potentsiaalselt kogu teenuste ökosüsteemi. Vastav andmesubjekt ei saa ainult ERRS-i tasandilt piisava selgusega ette näha, millisteks konkreetseteks toiminguteks tema terviseandmeid kasutatakse. Seetõttu võib ERRS § 7 lg 4 olla vastuolus eesmärgipärasuse põhimõttega. Kui aga sätet kitsendada nii, et see seoks eriliiki andmete töötlemise mõne konkreetse eesmärgiga, suureneb asjakohaste töötlemistoimingute ettenähtavus nii andmesubjekti kui ka vastutava töötleja jaoks. • Eluliste huvide kaitse (art. 6(1)(d) ja art 9(2)(c)). See erand hõlmab olukordi, kus eriliigiliste isikuandmete töötlemine on vajalik andmesubjekti või teise füüsilise isiku eluliste huvide kaitseks.9 Sellised elulised huvid hõlmavad füüsilist puutumatust ja elu, mistõttu peab töötlemise olukord puudutama isiku tervist või turvalisust.10 Sellist erandit saaks rakendada näiteks meditsiinilise abi osutamisel või humanitaarkriisi korral, kui andmesubjekt ise ei ole võimeline nõusolekut andma. See erand ei ole sobilik õiguslik alus, kuna soodustatud isiku terviseandmete töötlemine siinkohal ei küündi tema eluliste huvide kaitsmiseni ning samuti on ta võimeline ise oma nõusolekut andma. • Avalik ülesanne või avalik huvi (art. 6(1)(e)) / avalikes huvides töötlemine liidu või liikmesriigi õiguse alusel (art 9(2)(g)). Selle erandi alusel on isikuandmete töötlemine lubatud juhul, kui see on vajalik ülesande täitmiseks, mis toimub avalikes huvides või ametivõimu teostamise raames ning mis on vastutavale töötlejale seadusega antud. Avalikud ülesanded on vahetult seadusega või seaduse alusel riigile, kohalikule omavalitsusele või muule avalik-õiguslikule juriidilisele isikule pandud ülesanded. Sellise ülesande määramine eeldab selgesõnalist õiguslikku alust ning pelgalt lepingu alusel antud ülesanne, isegi kui see teenib avalikku huvi, ei ole piisav.11 Erivajadustega isikute andmete töötlemine RaRa poolt on osa asutuse avaliku ülesande täitmisest. Vastavalt ERRS §-le 42 on RaRa ülesanded pimedate raamatukoguna pimedatele, vaegnägijatele või muu trükikirja lugemise puudega isikutele ligipääsetavas vormis väljaannete valmistamine, komplekteerimine, säilitamine ja kättesaadavaks tegemine. Lisaks eelnevale pimedate ja vaegnägijate tegevust, rehabilitatsiooni ja õpetamist käsitlevate tavakirjas väljaannete komplekteerimine, säilitamine ja kättesaadavaks tegemine. Arvestades RaRa avalikke ülesandeid ning eeltoodut, siis erivajadustega isikutele sama teenuse osutamine, sealhulgas vajalike erisustega, on RaRa avaliku ülesande lahutamatu osa. 9 IKÜM põhjendus 46 10 IKÜM põhjendus 112 11 Commentary, page 335 Artikkel 9 lõige 2 punkt g seab eriliigiliste isikuandmete puhul kõrgema lävendi kui Artiklist 6(1)(c) tulenev õiguslik alus ning kohaldub juhtudel, kui eriliigiliste andmete töötlemine on vajalik olulise avaliku huviga seotud põhjustel liidu või liikmesriigi õiguse alusel ning on proportsionaalne saavutatava eesmärgiga, austab isikuandmete kaitse õiguse olemust ja tagatud on sobivad ja konkreetsed meetmed andmesubjekti põhiõiguste ja huvide kaitseks. Sotsiaalkaitse on määruses ära märgitud kui üks pädevatest avalikest huvidest.12 See ületab ka olulisuse künnise, sest teavikutele juurdepääsu tagamine ligipääsetavas vormis tagab puuetega inimeste võrdse kohtlemise ning nende võrdse ligipääsu teabele. Nii AutÕS kui ka ERRS-i sätete vajalikkus ja proportsionaalsus on seadusjärgse kohustuse aluse artikkel 6 lõike 1 punkti c analüüsis välja toodud ning neid saab kohaldada ka käesolevate õiguslike aluste puhul. Seetõttu hindame siin õiguse olemuse austust ning konkreetsete kaitsemeetmete tagamist. o AutÕS. Kuivõrd terviseandmete töötlemine on piiritletud tehnilises kirjelduses ning ülalpool aruandes kirjeldatud andmeliikidega ning jääb rangelt eesmärgipäraseks, ei kahjusta see üldiselt isikuandmete kaitse õiguse olemust. Samas ei sätesta AutÕS kaitsemeetmeid piisava konkreetsusega. § 254 piirdub ainult sellega, et vastaval pädeval asutusel on luba kohustuse täitmiseks terviseandmeid töödelda soodustatud isiku staatuse tuvastamiseks, kuid ei tuvasta, milliseid isikuandmeid või andmeliike selliseks töötluseks kasutada võib. Sätte ebatäpsus ja menetluse kirjelduse puudulikkus võib tekitada riski, et töödeldakse eriliigilisi andmeid, mis ei ole nõuetekohased. Seega ei ole sobilik RaRa’l tugineda AutÕS’ile sätte praegusel kujul kui pädevale õiguslikule alusele artikli 9 lõike 2 punkti g mõistes. o ERRS. Samuti on § 7 lõikes 4 liiga ebamäärase sõnastusega, et tagada andmesubjekti õiguse olemuse austus. Kuigi sättes on ära piiritletud tõendamisallikad vastava õiguse tuvastamiseks, puuduvad seaduse sõnastuses piisavad konkreetsed kaitsemeetmed ning eelduslikult tugineb asutuse tasandil olevatele andmetöötluse eeskirjadele, jättes seega kaitsemeetmed osaliselt delegeerituks. • Õigustatud huvi (art 6(1)(f)). Avaliku sektori asutused ei saa isikuandmete töötlemisel tugineda õigustatud huvile, kui isikuandmeid töödeldakse avaliku sektori asutuse ülesannete täitmiseks.13 • Töötlemine, mis on vajalik vastutava töötleja või andmesubjekti kohustuste täitmiseks ja konkreetsete õiguste teostamiseks tööõiguse, sotsiaalkindlustuse ja sotsiaalkaitse valdkonnas (art 9(2)(b)). Siin on käsitletud 12 IKÜM põhjendus 45 13 IKÜM põhjendus 47 ja Artikkel 6(1) viimane lause eriliigiliste andmete töötlemise keelu erandit, mis võimaldab tööandjal töödelda selliseid andmeid, kui see on vajalik vastutava andmesubjekti tööõiguslike kohustuste täitmiseks või õiguste teostamiseks töösuhete, sotsiaalkindlustuse või sotsiaalkaitse valdkonnas. Kuna puudega isiku ja RaRa vahel ei eksisteeri töösuhet, ei ole nimetatud erand antud kontekstis kohaldatav. • Sihtasutuse, ühenduse või muu mittetulundusühingu õiguspärase tegevuse raames (art 9(2)(d)). Terviseandmete puhul ei saa seaduslik alus olla töötlemine õiguspärase tegevuse raames, sest see kehtib filosoofiliste, religioossete või ametiühinguliste sihtasutuste, ühenduste ja MTÜ-de liikmelisusega soetud andmete kohta. See erand siin ei kohaldu. • Andmesubjekt on isikuandmed ilmselgelt avalikustanud (art 9(2)(e)). See erand siin ei kohaldu. • Õigusnõude koostamine, esitamine või kaitsmine (art 9(2)(f)). See erand on ette nähtud andmesubjekti õiguse tõhusale õiguskaitsevahendile ja õiglasele kohtumenetlusele kaitseks, nagu sätestatud Euroopa Liidu põhiõiguste harta artiklis 47 ja Euroopa inimõiguste konventsiooni artiklis 6. Erandit saab kohaldada nii kohtumenetluses (hagi esitaja või kostjana) kui ka haldus- ja eraõiguslikes menetlustes, sealhulgas vahekohtutes. Kuna seadusega tagatud ligipääsu võimaldamine kui isikuandmete töötlemise eesmärk ei ühti selle alusega, ei ole see alus pädev. • Ennetava meditsiini või töömeditsiini raames (art 9(2)(h)). See erand võimaldab eriliigiliste isikuandmete töötlemist tervishoiueesmärkidel, kui neid andmeid töötleb või nende töötlemist juhendab tervishoiutöötaja või muu kutsealaselt konfidentsiaalsuskohustusega isik, näiteks arst, hambaarst, psühholoog, haigla või kindlustusandja.14 Siinkohal ei ühti soodustatud isikute andmete töötlemise eesmärk ning ka RaRa kui vastutav töötleja selle erandiga, mistõttu ei ole see sobilik õiguslik alus. • Rahvatervise valdkonna avalikes huvides (art 9(2)(i)). See erand hõlmab eriliigiliste isikuandmete töötlemist rahvatervise valdkonnaga seotud avalikes huvides. IKÜM-i põhjendus 54 viitab määrusele (EL) nr 1338/2008, mille kohaselt rahvatervis hõlmab kõiki tervisega seotud aspekte, sealhulgas terviseseisundit, haigestumust, puudeid, tervisemõjureid, tervishoiuvajadusi, tervishoiuteenuste kättesaadavust ja rahastamist ning suremuse põhjuseid. Artikli 9 lõige 2 punkt i täpsustab, et erandit saab rakendada eelkõige tõsiste piiriüleste terviseohtude ennetamisel ning tervishoiuteenuste ja meditsiiniseadmete kvaliteedi ja ohutuse tagamisel. Siinkohal ei ühti soodustatud isikute andmete töötlemise eesmärk selle erandiga, mistõttu ei ole see sobilik õiguslik alus. 14 IKÜM artikkel 9 lg 3 • Avalikes huvides toimuva arhiveerimise, teadus- või ajaloouuringute või statistilisel eesmärgil (art 9(2)(j)). Siinkohal ei ühti soodustatud isikute andmete töötlemise eesmärk selle erandiga, mistõttu ei ole see sobilik õiguslik alus. RaRa töötleb isikute terviseandmeid osana oma avalikust ülesandest, pakkudes nendele ligipääsetavas vormis teavikuid. Kuna isikuandmete töötlemine toimub avaliku ülesande täitmise raames, ei ole RaRa-l õigust lisaks küsida samade andmete töötlemiseks isiku nõusolekut, kuna see oleks eksitav ning ei vastaks IKÜM-i nõuetele. Nõusoleku kui õigusliku aluse rakendamine isikuandmete töötlemisel on asjakohane vaid juhtudel, kus isikutel on täielik otsustamisvabadus oma andmete töötlemise üle ja see ei kaasa negatiivseid tagajärgi. Nõusolek peaks olema vabatahtlik, informeeritud ja tagasivõetav, sobitudes hästi mugavusteenuste kontekstiga. Üheks oluliseks probleemkohaks on ERRS § 7 lõike 4 sõnastus, mis on üldine ega sisalda piisavalt konkreetseid juhiseid. Antud seaduse punkt näeb ette üldise informatsiooni dokumentide kohta, millega määratakse isiku õigus teavikutele ligipääsuks, kuid jätab täpsustamata konkreetsed diagnoosid või tingimused, mille alusel isikul tekib ligipääsuõigus. Praegu sõltub terviseandmete töötlemisel tõendi sisulise hindamise eest RaRa töötaja, kellel ei pruugi olla piisavat meditsiinilist ekspertteadmist, et objektiivselt ja asjatundlikult hinnata diagnoosi sobivust. See võib kaasa tuua vigu õiguse tuvastamisel ning erivajadustega isikute teenuse kvaliteeti ja kättesaadavust. Sellisest ekspertiisi puudumisest tulenevad riskid võivad kahjustada andmesubjektide õigusi ja suurendada ebatäpsuste ning vigade ohtu terviseandmete käsitlemisel. Oluline oleks täiendada seadust täpsustavate tingimuste ja kriteeriumitega, mis lihtsustaksid töötajatel õigete otsustuste tegemist ning vähendaksid subjektiivsuse mõju. Vastavalt tulevikukontseptsioonile on üheks oluliseks eesmärgiks võimaldada andmevahetust SKAIS-i või tulevikus loodava uue infosüsteemiga, et lihtsustada soodustatud kasutajate tuvastamist ja teenuste pakkumist neile, kellel on tervislikel põhjustel erivajadused. Liidestus SKAIS-i ja RaRa vahel eeldab selget õiguslikku alust, milleks on tuginedes eeltoodule kaks võimalust, kas seadusjärgse kohustuse täitmine (art. 6(1)(c)) või avalik ülesanne (art. 6(1)(e)). Õigusanalüüsi tulemusel tuleb pidada sobivaimaks õiguslikuks aluseks otsepäringu tegemisel SKAIS-i RaRa poolt avaliku ülesande teostamist (art. 6(1)(e)). Vastavalt eelpool toodud tulevikukontseptsioonile on RaRa poolt SKAIS-ist kogutavate andmete hulgas ka puude määramise otsuse kehtivus. Proportsionaalsuse kontroll isiku terviseandmete korduvaks töötlemiseks RaRa poolt avaliku ülesande alusel (IKÜM art. 6(1)(e)) hõlmab mitmeid olulisi aspekte. Korduv kontroll peaks tagama, et andmed on ajakohased ja teenused on erivajadustega isikutele jätkuvalt kättesaadavad vastavalt nende vajadustele. Tuleb hinnata, kas sama eesmärki saab saavutada vähem invasiivse meetodi kaudu. Arvestades, et puude kehtivuse kontroll on kõige efektiivsem viis tagada teenuse asjakohasus, siis võib seda pidada proportsionaalseks. Töötlemine peab olema piiratud ainult vajalike andmetega, st ainult andmetega, mis on hädavajalikud teenuse osutamise eesmärgi täitmiseks. Peab olema tagatud piisavad turvameetmed, et kaitsta isikuandmeid väärkasutuse, volitamata juurdepääsu ja lekkimise eest. Andmesubjektidele peab olema läbi andmejälgija teenuse tagatud läbipaistev teavitus nende andmete töötlemise eesmärgist, ulatusest ja ajakohastamisest. Nad peaksid olema teadlikud sellest, kui nende andmeid kontrollitakse ning miks seda tehakse. Kokkuvõttes võib korduvat kontrolli pidada proportsionaalseks, kui see vastab ülaltoodud kriteeriumitele ning on selgelt sidus raamatukogu avaliku ülesande täitmisega. Oluline on tagada, et korduv töötlemine aitaks reaalselt kaasa teenuse kvaliteedi ja kättesaadavuse säilitamisele erivajadustega isikutele ning oleks kooskõlas isikuandmete kaitse põhimõtetega. Haridussüsteemi kasutaja Haridussüsteemi kasutajatele teenuse osutamiseks andmetöötluse eesmärk on tuvastada, kas piiratud kättesaadavusega õppematerjalide laenutusteenust sooviv isik kuulub vastavasse sihtrühma. Samuti tuleb õigusliku aluse tuvastamiseks jaotada teenuse kasutajad kaheks: i) õppurid ja vähemalt 3 EAP ametikoha koormusega õppejõud, kelle kohta on EHIS-es andmeid ning kelle sihtrühma kuuluvuse tuvastamiseks saab teha vastava päringu EHIS-est, ning ii) õppejõud alla 3 EAP ametikoha koormusega ning muud akadeemilised ja mitte- akadeemilised töötajad, kelle andmeid ei ole EHIS-es ja kelle sihtrühma kuuluvuse tuvastamiseks peab tegema päringu TÖRi. Õppurid ja vähemalt 3 EAP ametikoha koormusega õppejõud Piiratud ligipääsuga väljaannete laenutamise teenuse pakkumiseks on RaRa sõlminud vastava haridusasutusega koostöölepingu, mille kohaselt volitab haridusasutus kui vastutav töötleja RaRa-d töötlema koostöölepingu täitmisel isikuandmeid. Olukorras on keskne küsimus, kas haridusasutus võib IKÜM-i alusel volitada RaRa-d tegema päringuid EHIS-esse õppurite ja õpetajate piiratud sihtrühma kuuluvuse kohta. IKÜM artikli 28 lõike 3 kohaselt võib volitatud töötleja töödelda isikuandmeid üksnes vastutava töötleja nimel ja dokumenteeritud juhiste alusel. Selleks peab vastutava ja volitatud töötleja vahel olema sõlmitud leping, milles on sätestatud töötlemise sisu ja kestus, töötlemise laad ja eesmärk, isikuandmete liigid, andmesubjektide kategooriad ning mõlema poole õigused ja kohustused. Vastav leping on osapoolte vahel sõlmitud. Antud juhul on probleemiks asjaolu, et EHIS on riiklik register, mille vastutav töötleja on Haridus- ja Teadusministeerium. Kui RaRa teeb päringuid otse EHISest, ei toimu andmete töötlemine enam üksnes haridusasutuse nimel, vaid RaRa omandab iseseisva juurdepääsu registrile. Sellisel juhul ei saa RaRa-d käsitleda pelgalt volitatud töötlejana, vaid tema roll võib kvalifitseeruda iseseisvaks või kaasvastutavaks töötlejaks, mis eeldab eraldi õiguslikku alust. • Nõusolek (art 6(1)(a)). Nõusolek ei ole isikuandmete töötlemisel kõige sobivam alus, kui andmesubjekti nõusoleku andmine on teenuse kättesaadavuse eeldus. Kuna andmesubjekti kuuluvus sihtgruppi on vaja tuvastada läbi EHIS-e päringu, et anda neile ligipääs piiratud ligipääsuga digitaliseeritud õppematerjalidele, oleks teenuse osutamiseks sobilikum õiguslik alus lepingu täitmine vastavalt IKÜM artikli 6 lõike 1 punktile b. • Lepingu täitmine (art. 6(1)(b)). Lepingu täitmine saab olla isikuandmete töötlemise õiguslikuks aluseks vaid juhul, kui isik, kelle andmeid töödeldakse, on lepingu pool, mistõttu ei ole käesolev koostööleping haridusasutuse ja RaRa vahel piisav õiguslik alus EHIS-est andmete töötlemiseks RaRa poolt. • Seadusjärgse kohustuse täitmine (art. 6(1)(c)). Raamatukogudel ei ole iseseisvat õiguslikku alust digitaliseeritud õppematerjalide laenutusteenuse pakkumiseks. • Eluliste huvide kaitse (art. 6(1)(d)). Alus ei ole asjakohane, sest antud eesmärgil isikuandmete töötlemine ei ole vajalik andmesubjekti eluliste huvide kaitseks. • Avalik ülesanne või avalik huvi (art. 6(1)(e)). Haridussüsteemi kasutajatele piiratud ligipääsuga õppematerjalide laenutusteenuse osutamiseks peab RaRa tuvastama, kas isik kuulub sihtrühma ja leidma selleks õigusliku aluse. Õppurid ja vähemalt 3 EAP ametikoha koormusega õppejõud saavad nende kuuluvust tuvastada läbi EHIS-e päringu. Vastava päringu sobilikuks õiguslikuks aluseks võib olla avalikus huvis oleva ülesande täitmine, eeldusel, et ERRS § 3 lg-s 1 sätestatud RaRa üldeesmärki tõlgendatakse laialt ning selle hulka arvestatakse ka kooliraamatukogudele teenuse osutamine. Kehtiva õigusraamistiku järgi on kooliraamatukogude ülesande täitmise selgesõnaline säte Põhikooli- ja gümnaasiumiseaduses § 41 , mis käsitleb ainult rahvaraamatukogusid. Õiguskindluse tagamiseks oleks siiski otstarbekas täiendada ERRS § 4 sättega, mis määratleks kooliraamatukogudele teenuse pakkumise RaRa ülesandena, nagu on sätestatud pimedate raamatukogu või parlamendiraamatukoguna tegutsemine puhul. • Õigustatud huvi (art 6(1)(f)). Avaliku sektori asutused ei saa isikuandmete töötlemisel tugineda õigustatud huvile, kui isikuandmeid töödeldakse avaliku sektori asutuse ülesannete täitmiseks.15 Õppejõud alla 3 EAP ametikoha koormusega ning muud akadeemilised ja mitte- akadeemilised töötajad Kuna EHIS ei kata kõiki haridussüsteemi töötajaid, peab RaRa selliste isikute ligipääsuõiguse tuvastamiseks tegema päringu TÖRi. Vastavate isikuandmete töötlemisele on vaja tuvastada õiguslik alus määruse artiklist 6(1). • Nõusolek (art 6(1)(a)). Muude haridusasutuse töötajate puhul ei ole nõusolek isikuandmete töötlemisel kõige sobivam alus. Sarnaselt õppurite ja üle 3 EAP ametikoha koormusega õppejõududele sõltuks ka nende puhul teenuse kättesaadavus andmesubjekti nõusolekust TÖR-i päringu tegemiseks. 15 IKÜM põhjendus 47 ja Artikkel 6(1) viimane lause • Lepingu täitmine (art. 6(1)(b)). Lepingu täitmine saab olla isikuandmete töötlemise õiguslikuks aluseks vaid juhul, kui isik, kelle andmeid töödeldakse, on lepingu pool, mistõttu ei ole käesolev koostööleping haridusasutuse ja RaRa vahel piisav õiguslik alus EHIS-est andmete töötlemiseks RaRa poolt. • Seadusjärgse kohustuse täitmine (art. 6(1)(c)). RaRa-l ei ole iseseisvat õiguslikku alust digitaliseeritud õppematerjalide laenutusteenuse pakkumiseks. Seetõttu ei ole see õiguslik alus sobiv. • Eluliste huvide kaitse (art. 6(1)(d)). Alus ei ole asjakohane, sest antud eesmärgil isikuandmete töötlemine ei ole vajalik andmesubjekti eluliste huvide kaitseks. • Avalik ülesanne või avalik huvi (art. 6(1)(e)). Kuna alla 3 EAP koormusega õppejõudude ning teiste haridusasutuse töötajate puhul on teenuse olemus võrreldav õppuritele ja üle 3 EAP koormusega õppejõududele pakutava teenusega, siis ühtib TÖR- ist päringu tegemise õiguslik alus EHIS-e päringuga. • Õigustatud huvi (art 6(1)(f)). Avaliku sektori asutused ei saa isikuandmete töötlemisel tugineda õigustatud huvile, kui isikuandmeid töödeldakse avaliku sektori asutuse ülesannete täitmiseks.16 Haridussüsteemi kasutajatele piiratud ligipääsuga õppematerjalide laenutusteenuse osutamiseks peab RaRa tuvastama, kas isik kuulub sihtrühma ja leidma selleks õigusliku aluse. Selleks, et tuvastada õppuri ja vähemalt 3 EAP ametikoha koormusega õppejõu kuuluvust vastavasse sihtgruppi EHIS-e päringukaudu, peab RaRa-l olema eraldi ning iseseisev õiguslik alus. Õiguslik alus ei saa tuleneda koostöölepingus antud volitustest, sest EHIS-e andmekogu vastutav töötleja ei ole haridusasutus vaid Haridus- ja Teadusministeerium. Avalik ülesanne võib olla sobilik õiguslik alus, kui ERRS-ist tulenevat RaRa üldeesmärki tõlgendada laialt. Kuigi kooliraamatukogude ülesanne on sätestatud Põhikooli- ja gümnaasiumiseaduse § 41 lg-s 5 muuhulgas rahvaraamatukogudele, oleks õiguskindluse tagamiseks otstarbekas lisada vastav ülesanne ka ERRS § 4 RaRa teiste funktsioonide kõrvale. Alla 3 EAP koormusega õppejõudude ning teiste haridusasutuse töötajate puhul on teenuse olemus võrreldav õppuritele ja üle 3 EAP koormusega õppejõududele pakutava teenusega, mistõttu jääb töötlemise õiguslik alus (avalik ülesanne) ja töötlemise vältimatus teenuse osutamiseks samaks. 16 IKÜM põhjendus 47 ja Artikkel 6(1) viimane lause Volitatud kasutaja Volitatud kasutajate puhul on vaja eristada kaks juhtumit: i) alla 18-aastase isiku esindamine lapsevanema või eestkostja poolt; ii) täisealise isiku volitus kolmandale isikule tema eest toimingute tegemisel. Alla 18-aastase isiku esindussuhte tuvastamine ja töötlemine MiRKO platvormil saab kasutajaks registreerida alates 13. eluaastast. Laenutamise teenuse kasutamiseks vajab aga 13.-17. aastane isik vanema või eestkostja nõusolekut. Alla 13-aastase kasutaja registreerib lapsevanem või eestkostja. RaRa peab sel juhul töötlema esindaja andmeid (nimi, isikukood, kontakt) ning siduma need esindatava kasutajaprofiiliga. Ühtlasi tuleb arvestada, et kui eestkoste suhe lõpeb (näiteks lapse täisealiseks saamise puhul), siis muutub ka andmetöötluse alus, sest volitus lõpeb. • Nõusolek (art 6(1)(a)). o Kuivõrd on sobivam õiguslik alus tuvastatav, ei ole nõusolekule kui õiguslikule alusele toetumine sobivaim. o Lisaks sellele ei tohiks IKÜM põhjendus 42 kohaselt lugeda nõusolekut vabatahtlikult antuks, kui andmesubjekt ei saa kahjulike tagajärgedeta nõusoleku andmisest keelduda või seda tagasi võtta. Kuna alaealisele osutatav raamatukoguteenus on tehtud sõltuvaks nii selle isiku kui ka tema seadusliku esindaja andmete töötlusest, ei pruugi nõusolek olla vaba, sest nõusoleku andmise alternatiiv on faktiline loobumine teenusest. Kuivõrd alaealise isiku ning tema seadusliku esindaja andmetöötlus on seadusest tulenev kohus, ei ole nõusoleku omandamine sobilik kui põhiline isikuandmete töötluse õiguslik alus. Nõusolekut võib siiski kasutada õigusliku alusena vabatahtlike lisateenuste jaoks või sekundaarse õigusliku alusena. • Lepingu täitmine (art. 6(1)(b)). IKÜM artikkel 6 lg 1 punkt b sätestab, et isikuandmete töötlemine on õiguspärane, kui "töötlemine on vajalik lepingu täitmiseks, mille pooleks on andmesubjekt". See säte eeldab kahe kumulatiivse tingimuse täitmist: (i) kehtiva lepingu olemasolu konkreetse andmesubjektiga ning (ii) töötlemise objektiivset vajalikkust selle lepingu täitmiseks. Alla 18-aastane ehk piiratud teovõimega isik võib teha tehingu seadusliku esindaja nõusolekul või heakskiiduga.17 Nõusoleku või heakskiidu puudumisel on leping nn hõljuvalt tühine. Seega on seadusliku esindaja kaasamine lepingu sõlmimisel kohustus TsÜS mõttes, et tagada lepingu kehtivus. Kasutajaks registreerides on tehingu poolteks raamatukogu ning alaealine isik ning poolte vahel 17 § 11 lg 2 TsÜS sõlmitakse raamatukogu poolt pakutavate teenuste kasutamiseks leping. Oluline on siinkohal mõista, kes on andmesubjekt antud olukorras. Alaealine isik kui andmesubjekt on vastava lepingu pool ning kuna tema isikuandmete töötlemine on nii lepingu sõlmimisele eelnevate meetmete võtmiseks kui ka lepingu täitmiseks vajalik, sobib artikkel 6 lg 1 punkt b alaealise isiku andmete töötluse seaduslikuks aluseks. Lapsevanem või eestkostja ei ole antud tehingu pool, vaid ühe tehingu poole seaduslik esindaja (välja arvatud juhul, kui ta kaasatakse lepingusse poolena). Kuigi tehingu toimumiseks annab nõusoleku seaduslik esindaja, ei tekita ta õiguseid ja kohustusi iseendale, vaid sellele, kelle esindaja ta on. Kuigi vastava seadusliku esindaja andmeid on tarvis töödelda lepingu sõlmimisele eelnevate meetmete võtmiseks, ei sobi IKÜM artikkel 6 lg 1 punkt b vastava töötlemise seaduslikuks aluseks, sest vastava töötlemise andmesubjekt ehk seaduslik esindaja ei ole sõlmitava lepingu pool. Samuti ei võeta lepingu sõlmimisele eelnevaid meetmeid mitte seadusliku esindaja, vaid alaealise isiku taotlusel, kes on algatanud lugejaks registreerumise. Sellise töötlemise jaoks tuleb leida muu õiguslik alus, näiteks IKÜM artikkel 6 lg 1 punkt c või 6 lg 1 punkt e. • Seadusjärgse kohustuse täitmine (art. 6(1)(c)). Tsiviilseadustiku üldosa seaduse § 8 lg 2 sätestab, et alla 18-aastasel isikul on piiratud teovõime ehk õigus teha tehinguid. Kuna raamatukogu lugejaskonnaga ja laenutusteenusega liitumine on mitmepoolne tehing, mis võib tuua piiratud teovõimega isikule tsiviilkohustusi (näiteks võimalik viivis, raamatu rikkumise hüvitamine), on sellise tehingu tegemiseks vaja seadusliku esindaja nõusolekut.18 ERRS § 7 lg 2 näeb ette, et kojulaenutamise õiguse saamiseks on kuni 18- aastase isiku puhul vajalik lapsevanema või seadusliku esindaja kirjalik nõusolek ning lugejate andmebaasi kantakse nii alaealise kui ka esindaja kindlaksmääratud isikuandmed (nimi, isikukood/sünniaeg, aadress, telefon, e-post, kui on olemas). o Kuivõrd ERRS kohustab RaRa’d sõnaselgelt alla 18-aastase teenuse kasutamiseks hankima seadusliku esindaja nõusoleku, siis on nõusoleku kogumise ja selle olemasolu haldamise aluseks artikkel 6 lg 1 punkt c kui kohustuslik toiming, mis jätab minimaalse kaalutlusruumi. Sama kehtib Rahvastikuregistri päringu kohta ulatuses, milles eriseadus kohustab kontrollima esindussuhte olemasolu ja ulatust. o Sellisel juhul tuleb kontrollida, et seadus kirjeldaks piisavalt täpselt, mida kontrollitakse (seose liik, kehtivus) ja millal (näiteks laenutuse hetkel või konto uuendamisel). Üldsõnaline viide teenuse osutamisele ei ole artikli 6(1)(c) jaoks piisav. ERRS säte määratleb nii töötluse eesmärgi kui ka ammendava loetelu andmeliikidest, mis võimaldab andmesubjektil piisava selgusega ette näha, mida 18 TSÜS § 11 lg 3 ja milleks töödeldakse. Samuti tagab sätte selgus, et töötlemine on andmesubjektile etteaimatav. o Kehtivas õigusraamistikus puudub säte, mis annaks RaRa-le õigusliku aluse töödelda rahvaraamatukogu alaealise lugeja ja tema seadusliku esindaja isikuandmeid. Seevastu 08.05.2025 esitatud rahvaraamatukogu seaduse muudatuse eelnõu näe ette ERRS-i täiendamist sättega, mis võimaldaks RaRa-l kui raamatukogude andmekogu haldajal töödelda ka rahvaraamatukogude alaealiste lugejate ja nende seaduslike esindajate isikuandmeid ning teha vastavate andmete saamiseks ka päringuid teistesse registritesse. o Seetõttu võib järeldada, et artikkel 6 lg 1 punkt c on pädev alus vaid nende konkreetsete toimingute jaoks, mida selge ja täpne seadus kohustab tegema (nt alla 18-aastase esindusnõusoleku olemasolu tuvastamine/registreerimine ja selle kontroll rahvastikuregistrist tehingu hetkel). • Eluliste huvide kaitse (art. 6(1)(d)). Alus ei ole asjakohane, sest käesolev isikuandmete töötlemine ei ole suunatud andmesubjekti või teise füüsilise isiku eluliste huvide kaitsele. • Avalik ülesanne või avalik huvi (art. 6(1)(e)). Selle erandi puhul on töötlemine lubatud avaliku ülesande täitmiseks või avaliku võimu teostamiseks, mille õiguslik alus on sätestatud EL või riigi õiguses.19 Avaliku sektori kontekstis märgib Euroopa Andmekaitsenõukogu, et põhiteenuste osutamisel on sobivaimad õiguslikud alused tavaliselt IKÜM artiklid 6 lg 1 punkt c või e.20 Nõusolekupõhine töötlemine ei ole võimusuhtest tulenevalt tavaliselt vaba, mistõttu moodustab artikkel 6 lg 1 punkt e avaliku sektori peamise õigusliku aluse. Rahvusraamatukogu kui avalik-õiguslik juriidiline isik täidab seaduse ja põhikirja alusel määratletud avalikke ülesandeid, mille hulka kuulub teavikute kogumine ja kättesaadavaks tegemine.21 Selleks, et võimalikud kasutajad saaksid kätte raamatukogu kogus olevaid teavikuid, peavad nad registreeruma lugejaks RaRa kasutuseeskirjas sätestatud korras. Antud eesmärgi saavutamiseks on RaRa’l vajalik tuvastada isikusamasus ning piiratud teovõimega isikute puhul nende seaduslik esindaja. Selle eesmärk on õiguspärase teenuse osutamine ja varalise kahju ja valeesinduse vältimine. Kuivõrd päringu tegemine Rahvastikuregistrist töötleb vähem informatsiooni (seadusliku esindaja olemasolu, roll, kehtivus) kui muude tõestusmaterjalide töötlemine, oleks päring vähem sekkuvam meetod. Samuti võib olla vajalik vastava esindaja korduskontroll iga laenutamisteenuse tehingu korral, kontrollimaks esindaja staatust ja tehingu õiguspärasust. Teisalt pole perioodiline ja 19 IKÜM Artikkel 6(3) 20 EDPB Guidelines on consent [link] 21 ERRS § 4 lg 1 punkt 1 tehinguväline kontroll seadusliku esindaja olemasolust ning staatusest eesmärgipärane, kuna sellest ei olene tehingu kehtivus. • Õigustatud huvi (art 6(1)(f)). Avaliku sektori asutused ei saa isikuandmete töötlemisel tugineda õigustatud huvile, kui isikuandmeid töödeldakse avaliku sektori asutuse ülesannete täitmiseks.22 Täisealise isiku volitus • Nõusolek (art 6(1)(a)). Kui sobivam õiguslik alus on tuvastatav, ei ole nõusolekule kui õiguslikule alusele toetumine sobivaim. Samuti võib nõusolekule tuginemine kui teenusele ligipääsu saamine olla ebasobiv õiguslik alus, kuna nõusolek ei pruugi olla piisavalt „vabatahtlik“. Füüsilise isiku ja avalik-õigusliku asutuse vahel on ebavõrdne võimuvahekord ning nõusoleku andmine on raamatukogu teenustele ligipääsu eeldus. Nõusolekut võib siiski kasutada õigusliku alusena vabatahtlike lisateenuste jaoks või sekundaarse õigusliku alusena. • Lepingu täitmine (art. 6(1)(b)). Analoogselt alaealise kasutaja ning tema seadusliku esindaja juhtumiga, ei ole täisealise poolt volitatud kolmas isik raamatukogu ja täisealise kasutaja vahel sõlmitud lepingu pool, mistõttu võib see olla asjakohane õiguslik alus vaid täisealise kasutaja enda ning mitte volitatud isiku andmete töötlemiseks. • Seadusjärgse kohustuse täitmine (art. 6(1)(c)). Kuivõrd täisealise isiku ehk esindatava ja kolmandast isikust esindaja vahel on lepinguline esindus, ei ole RaRa’l asjakohane tugineda seadusjärgse kohustuse täitmise alusele, sest selline esindusõigus ei tulene konkreetsest seadusest, vaid poolte omavahelisest kokkuleppest. Alus võib aga olla asjakohane, kui kohus on määranud täisealisele isikule eestkostja. Selline eestkoste määratakse eelkõige vaimse häirega isikule, kes ei ole võimeline oma tegusid ja nende tagajärgi mõistma ja juhtima.23 Vastavad eestkoste andmed on kohtumääruse alusel kantud Rahvastikuregistrisse, sh eestkostja isik ja tema ülesannete ulatus.24 Kuigi vastav esindusõigus on seadusjärgne, ei ole ERRS-is hetkel piisavalt täpset, selget ja eesmärgipärast õiguslikku sätet nagu alaealiste isikute puhul, mis kohustaks RaRa’d või lubaks tal täisealise isiku ning tema eestkostja isikuandmete töötlust. Kuigi Rahvastikuregistri seaduse alusel toimetab RaRa kui avalik-õiguslik asutus „avaliku ülesande täitmisel“, ei ole see sõnastus piisavalt täpne selle õigusliku aluse jaoks.25 • Eluliste huvide kaitse (art. 6(1)(d)). Alus ei ole asjakohane, sest käesolev isikuandmete töötlemine ei ole suunatud andmesubjekti või teise füüsilise isiku eluliste huvide kaitsele. 22 IKÜM põhjendus 47 ja Artikkel 6(1) viimane lause 23 Perekonnaseadus § 203 lg 1 24 vt. Aruande punkt 2.5.3 25 Rahvastikuregistri seadus § 44 • Avalik ülesanne või avalik huvi (art. 6(1)(e)). Eelnevalt on tuvastatud, et RaRa kui avalik-õiguslik juriidiline isik täidab seaduse ja põhikirja alusel määratletud avalikke ülesandeid, mille hulka kuulub teavikute kogumine ja kättesaadavaks tegemine. Nagu seadusjärgse kohustuse täitmise aluse puhul, näeb määruse artikkel 6 lõige 3 ette, et vastav õiguslik alus peab olema vajalik ning proportsionaalne. Sarnaselt artikli 6 lõike 1 punktiga c ei ole RaRa’l asjakohane tugineda seadusjärgse kohustuse täitmise alusele, kui ühe isiku volitus teisele on lepinguline. Olukordades, kus eestkoste on seadusjärgne, võib kohaldada avaliku huvi alust sarnaselt alaealise isiku seadusliku esindaja andmete töötlemise alusega, sest ka selle töötlemise eesmärk on õiguspärase teenuse osutamine, varalise kahju ja valeesinduse vältimine ning tehingu kehtivuse kontroll. Seetõttu võib järeldada, et artikkel 6 lg 1 punkt e on pädev alus töötlemaks nii lepingulise volitatud isiku kui ka kohtu poolt määratud eestkostja andmeid vaid nende konkreetsete toimingute jaoks, mida selge ja täpne seadus kohustab RaRa-d tegema (nt esindusnõusoleku olemasolu tuvastamine/registreerimine ja selle kontroll rahvastikuregistrist tehingu hetkel). • Õigustatud huvi (art 6(1)(f)). Avaliku sektori asutused ei saa isikuandmete töötlemisel tugineda õigustatud huvile, kui isikuandmeid töödeldakse avaliku sektori asutuse ülesannete täitmiseks.26 RaRa teenuste osutamise eesmärgil on vajalik isikusamasuse kontroll ning piiratud teovõimega isikute puhul ka nende seadusliku esindaja tuvastamine. Alla 18-aastane isik võib teha tehingu seadusliku esindaja nõusolekul või heakskiiduga. IKÜM artikkel 6 lg 1 punkt b võimaldab isikuandmete töötlemist lepingu täitmiseks, mille pooleks on andmesubjekt. Alaealiste puhul on vajalik seadusliku esindaja nõusolek või heakskiit lepingu sõlmimise kehtivuse tagamiseks, kuid esindaja ise ei ole lepingu pool. Selle seadusliku aluse põhjal on võimalik töödelda alaealise isikuandmeid lepingu täitmiseks, kuid seadusliku esindaja andmete töötlemise aluseks on seadusjärgse kohustuse täitmine nende konkreetsete toimingute jaoks, mida selge ja täpne seadus kohustab tegema (nt alla 18-aastase esindusnõusoleku olemasolu tuvastamine/registreerimine ja selle kontroll rahvastikuregistrist tehingu hetkel). ERRS kehtivas redaktsioonis annab RaRa-le konkreetse seadusliku aluse nii alaealise lugeja kui ka seadusliku esindaja isikuandmete säilitamiseks, tingimusel, et alaealine isik on RaRa lugeja. Kui aga jõustub Rahvaraamatukogu seaduse muudatus, millega lisatakse ka ERRS-i säte, mis annab RaRa-le aluse teiste raamatukogude lugejate isikuandmete töötlemiseks, saab vastavat sätet kasutada rahvaraamatukogude lugejate isikuandmete töötlemiseks. 26 IKÜM põhjendus 47 ja Artikkel 6(1) viimane lause Proportsionaalsuse kontrolli puhul on oluline hinnata, kas iga-aastaste korduspäringute tegemine seadusliku esindaja andmete õigsuse tagamiseks on vajalik ja põhjendatud. Esimene aspekt on juriidiline alus: ERRS ei maini otseselt andmete õigsuse kontrolli, kuid raamatukogu teenust võib käsitleda avalikes huvides oleva ülesandena. Seadusliku esindaja andmete täpsus võib aidata maandada varalise kahju riske, mis on raamatukogu jaoks oluline. Siiski, proportsionaalsuse kriteeriumi rakendamisel peab kaaluma, kas korduv päring on tõepoolest teenuse osutamiseks hädavajalik. Kui tehingu kehtivus ja teenuse pakkumine ei sõltu otseselt iga-aastasest andmete kontrollist, siis võib sellist tegevust pidada ebaproportsionaalseks. Kuigi varalise kahju vältimine on oluline, ei pruugi massiline, tehinguväline ja perioodiline kontroll olla õigustatud, eriti kui selline kontroll ei mõjuta otseselt tehingu legitiimsust või teenuse katkematut pakkumist. Lõpuks, kaalutlus tuleb viia tasakaalu: kas iga-aastased päringud seavad ohtu isikuandmete kaitse mõõdukuse põhimõtte ja kas täiendav kaitse varaliste riskide vastu õigustab sellist ulatuslikku andmete töötlemist. Kui andmete täpsust ei kontrollita just tehingu hetkel, võib ülemäärase kontrolli läbi viimine olla ebaefektiivne ja liigne. Rahvusraamatukogu töötleb täisealiste piiratud teovõimega isikute eestkostja andmeid nende avaliku ülesande täitmiseks, milleks on teavikute kättesaadavaks tegemine. Kuna andmete töötlemine toimub avaliku ülesande raames, ei ole vajalik küsida isikute nõusolekut nende andmete töötlemiseks. Proportsionaalsuse kontrolli teostamisel andmete säilitamise ja iga-aastaste korduspäringute osas tuleb hinnata, kas need tegevused on tõepoolest vajalikud avalikus huvis oleva ülesande täitmiseks. Arvestades, et täisealise isiku eestkostja andmete säilitamist otseselt seadusega nõutud ei ole, on võimalik tugineda 6(1)(e) artiklile, mis käsitleb andmete töötlemist avalikus huvis oleva ülesande täitmiseks. Andmete säilitamine võib olla põhjendatud tehingu kehtivuse tõendamiseks või muude seadusest tulenevate kohustuste täitmiseks. Näiteks võib andmeid vaja minna hilisemate vaidluste lahendamiseks või tõendamaks, et esindussuhe oli tehingu hetkel kehtiv. Siiski peab säilitamisaeg olema piiratud vaid sellega, mis on vajalik nende eesmärkide saavutamiseks, vältides liigset andmete kogumise perioodi. Iga-aastaste korduspäringute osas tuleb analüüsida, kas selline kontroll on tõesti vajalik, et tagada raamatukogu teenuse osutamine ja seotud varaliste riskide juhtimine. Kui perioodiline kontroll ei mõjuta otseselt tehingu kehtivust ega paranda teenuse kvaliteeti, võib selline tegevus olla ebaproportsionaalne. Massiliste ja sagedaste päringute läbiviimine ilma selge vajaduseta võib ülemääraselt sekkuda isikuandmete kaitse õigusesse. Kokkuvõttes peab proportsionaalsuse põhimõtte rakendamine tasakaalustama andmete säilitamise ja korduspäringute kasulikkust avaliku huvi ülesande täitmise kontekstis, tagades, et isikuandmete töötlemine toimub viisil, mis ei ületa vajalikku varalise riski maandamise ulatust ja on kooskõlas andmekaitse põhimõtetega. Raamatukoguteenuste kasutaja surma korral teenuste lõpetamine Raamatukogu poolt Isikuandmete kaitse seaduse § 9 lg 1 kohaselt kehtib andmesubjekti nõusolek tema eluajal ja 10 aastat pärast andmesubjekti surma (alaealisena surnu puhul 20 aastat), kui andmesubjekt ei otsustanud eluajal teisiti. Lõige 4 aga sätestab, et seda nõusolekut ei ole vaja, kui töödeldavad andmed on üksnes isiku nimi, sugu, sünni- ja surmaeg, surma fakt ja matmise aeg ja koht. Raamatukoguteenuse osutamise kontekstis tähendab see, et RaRa poolt teenuse kasutaja nime ning surma fakti töötlemisest tulenevad toiminguid (nt Rahvastikuregistrisse päringu tegemine) on lubatud teha IKÜM-ist tulenevat õiguslikku alust tuvastamata. Proportsionaalsuse testi rakendamine surma fakti perioodiliste päringute tegemisel Rahvastikuregistrisse eeldab mitmete aspektide kaalumist, et tagada isikuandmete töötlemise eesmärgipärasus ja mõõdukus. Esiteks, surma fakti töötlemine on erandlik olukord, kus ei ole nõutud eraldi õiguslikku alust, kui töödeldavateks andmeteks on ainult isiku nimi ja surma fakt. Siiski tuleb hinnata, kas päringute sagedus ja ulatus on põhjendatud raamatukoguteenuse kontekstis. Esimene kaalutlus on päringute sagedus. Sage, massiline ja perioodiline kontroll võib olla ülemäärane, kui seda ei tehta konkreetsete põhjustel, nagu näiteks teenuse osutamise järjepidevuse tagamine. Avaliku huvi ja teenuse kvaliteedi kontekstis võiks kaaluda päringute vajadust teatud ajahetkedel, nagu näiteks teenuse aastaseks uuendamiseks või pikendamiseks, et vältida tarbetut kontrolli, mis ei too teenuse osutamisele lisaväärtust. Teiseks, päringute sihtgrupp. Selleks, et määrata, milliste isikute kohta päringuid teha, võiks lähtuda põhimõttest, et kontrollida neid kasutajaid, kes on aktiivsed laenutajad, kellel on pooleliolevaid tehinguid või kelle lepingulised kohustused ja õigused on jäänud kehtima. Kui kasutaja konto on olnud pikemat aega mitteaktiivne, võiks kaaluda vajadust erakorralise päringu järele, et tagada lõpptulemuste õigsus. Kokkuvõttes, päringute tegemisel Rahvastikuregistrisse surma fakti kontrollimiseks tuleks lähtuda põhimõttest, et andmete töötlemine on kooskõlas teenuse osutamise vajadustega ja ei ületa vajalikku mahtu. Otsuste tegemisel peaks arvestama päringute eesmärki ja nende panust raamatukoguteenuse õiguspärasuse ja järjepidevuse tagamisel, hoides tehinguväliste ja massiliste päringute ulatust kontrolli all, et vältida ülemäärast sekkumist. Kasutajatele teadete saatmine Lisaks eelnevale teenusele soovib RaRa saata kasutajatele teateid, mille õiguslik alus tuleb tuvastada eraldiseisvalt. Siinkohal tuleb eristada kahte sorti teateid: i) põhiteenuse teated (nt. laenutähtaegade meeldetuletused); ja ii) teated personaalse ja/või proaktiivse sisuga (nt. personaalsed teavikute soovitused või sihtrühmapõhised lugemissoovitused). Põhiteenuse teated • Nõusolek (art 6(1)(a)). Kuivõrd on sobivam õiguslik alus tuvastatav, ei ole nõusolekule kui õiguslikule alusele toetumine siinkohal sobivaim. • Lepingu täitmine (art. 6(1)(b)). Lepinguline alus eeldab, et töötlemine on objektiivselt vajalik kasutaja ja RaRa vahelise lepingu täitmiseks. Andmesubjekti põhiandmete töötlemine, et saata ametlikke meeldetuletusi lepinguliste kohustuste (laenutatud teaviku tagastamise) täitmiseks saab käsitleda kui lepingu täitmiseks vajalikku isikuandmete töötlust.27 Kuivõrd RaRa töötleb põhiteenuste teadete saatmiseks ainult andmesubjekti põhiandmeid (nimi, e-posti aadress, laenutatud teavikute nimekiri), on sellise meeldetuletuse saatmine seoses laenutähtaegadega otseselt seotud lepingulise kohustuse täitmisega, olles seega kooskõlas nii proportsionaalsuse kui ka minimaalsuse printsiipidega. Seega võib lepingu täitmist kohaldada kui sobivat õiguslikku alust põhiteenuse teadete saatmisega seotud isikuandmete töötlemisel. • Seadusjärgse kohustuse täitmine (art. 6(1)(c)). RaRa-l ei ole seadusjärgset kohustust põhiteenuste teadete tegemiseks ning selle raames isikuandmete töötlemiseks. Seetõttu ei ole see õiguslik alus sobiv. • Eluliste huvide kaitse (art. 6(1)(d)). Alus ei ole asjakohane, sest personaalne teavitus ei ole suunatud andmesubjekti või teise füüsilise isiku eluliste huvide kaitsele. • Avalik ülesanne või avalik huvi (art. 6(1)(e)). Kuigi raamatukogu on avalik- õiguslik asutus, ei kuulu põhiteenuste teavituste eesmärgil andmete töötlemine tema nii seadusjärgsete kui ka avalikest huvist tulenevate kohustuste hulka, mistõttu ei ole see õiguslik alus sobiv. • Õigustatud huvi (art 6(1)(f)). Avaliku sektori asutused ei saa isikuandmete töötlemisel tugineda õigustatud huvile, kui isikuandmeid töödeldakse avaliku sektori asutuse ülesannete täitmiseks.28 27 WP29 Opinion 06/2014, lk.18 [link] 28 IKÜM põhjendus 47 ja Artikkel 6(1) viimane lause Personaalse/proaktiivse sisuga teated • Nõusolek (art 6(1)(a)). Kuivõrd muud õiguslikud alused ei ole asjakohased proaktiivse sisuga teadete eesmärgil isikuandmete töötlemiseks, võib RaRa kasutada nõusolekut õigusliku alusena. Kuigi põhjendus 43 märgib, et avalik-õiguslike asutuste puhul ei tohiks tugineda nõusolekule, ei ole määrus sellele tuginemise avalike asutuste poolt täielikult välistatud, kui nõusolek on vabatahtlik, konkreetne, teadlik ja ühemõtteline. Esiteks, vastav nõusolek võib olla vabatahtlik, kuivõrd andmesubjekt võib selle tagasi võtta ilma selleta, et ta jääb tuumik-teenusest ilma. Töötleja saab tagada nõusoleku konkreetsuse, selguse ja ühemõttelisuse, kui ta annab võimaluse andmesubjektil anda nõusoleku iga teabe tüübi (nt soovitused) ja teabekanali (nt e-postile) kohta, avalikustab andmesubjektile teabe iga eesmärgi ning kasutatavate andmeliikide kohta ning ei rakenda „bundling“ tüüpi nõusolekut. • Lepingu täitmine (art. 6(1)(b)). Lepinguline alus eeldab, et töötlemine on objektiivselt vajalik kasutaja ja RaRa vahelise lepingu täitmiseks. Kuigi vastutav töötleja ja andmesubjekt on sõlminud omavahel lepingu, siis lepingu alusel põhiteenus ehk teavikute laenutus toimib ka personaalsete pakkumuste saatmiseta. Seepärast ei ole lepingu täitmine sobilik õiguslik alus personaalsete teavituste eesmärgil isikuandmete töötlemisel. • Seadusjärgse kohustuse täitmine (art. 6(1)(c)). RaRal ei ole seadusjärgset kohustust personaliseeritud pakkumiste tegemiseks ning selle raames isikuandmete töötlemiseks. Seetõttu ei ole see õiguslik alus sobiv. • Eluliste huvide kaitse (art. 6(1)(d)). Alus ei ole asjakohane, sest personaalne teavitus ei ole suunatud andmesubjekti või teise füüsilise isiku eluliste huvide kaitsele. • Avalik ülesanne või avalik huvi (art. 6(1)(e)). Kuigi raamatukogu on avalik- õiguslik asutus, ei kuulu personaalsete teavituste eesmärgil andmete töötlemine tema nii seadusjärgsete kui ka avalikest huvist tulenevate kohustuste hulka, mistõttu ei ole see õiguslik alus sobiv. • Õigustatud huvi (art 6(1)(f)). Avaliku sektori asutused ei saa isikuandmete töötlemisel tugineda õigustatud huvile, kui isikuandmeid töödeldakse avaliku sektori asutuse ülesannete täitmiseks.29 RaRa saadab kasutajatele kahte tüüpi teateid: põhiteenuse teated (nt laenutähtaegade meeldetuletused) ja personaalsed/proaktiivsed teated (nt lugemissoovitused). Põhiteenuste teadete jaoks on sobivaks õiguslikuks aluseks lepingu täitmine, kuna selliste teadete saatmine on vajalik lepinguliste kohustuste täitmiseks. Personaalse ja proaktiivse sisuga teadete 29 IKÜM põhjendus 47 ja Artikkel 6(1) viimane lause saadetiste jaoks on nõusolek sobiv õiguslik alus, kui see on vabatahtlik ja konkreetne, kuna muud tavalised alused, nagu seadusjärgne kohustus või avalikes huvides olev ülesanne, ei ole siinkohal rakendatavad. <mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36" version="28.2.8"> <diagram name="Page-1" id="v6j-mDYY_y-E1--Az4GQ"> <mxGraphModel dx="2210" dy="2993" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0" adaptiveColors="simple"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="oUjf-phy96u-tlM8c5Ax-19" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="-810" y="-960" width="810" height="494.5" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-103" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="512" y="-1236" width="227" height="450" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-73" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="-803" y="-339" width="560" height="313" as="geometry" /> </mxCell> <mxCell id="wEOWZK71_5bbRY1_qstb-127" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="486" y="124" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-22" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="427" y="-40" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-25" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="411" y="264" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-29" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="475.5" y="-106" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-39" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-442" y="-331" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-54" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="488" y="130" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-57" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="488" y="151" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-60" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="477.5" y="11" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-72" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="19.5" y="216" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-66" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-350" y="-259" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-67" value="&lt;b&gt;RAKENDUS&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="-462" y="-326" width="195" height="290" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-68" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="67EpyFjbCDhxdhXUx1Xu-67" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-69" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-440" y="-191" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-70" value="&lt;b&gt;BIBLIOKIRJED&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="-783" y="-273" width="195" height="100" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-71" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="67EpyFjbCDhxdhXUx1Xu-70" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-81" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="80.75" y="-18.5" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-87" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="475.5" y="129" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-93" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="406.5" y="223" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-96" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="365" y="432" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-99" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="354.5" y="276" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="wEOWZK71_5bbRY1_qstb-118" value="&lt;b&gt;TARA&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="539" y="-1024" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="wEOWZK71_5bbRY1_qstb-119" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="wEOWZK71_5bbRY1_qstb-118" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-102" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="534" y="-993" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-104" value="&lt;b&gt;&lt;font style=&quot;font-size: 24px;&quot;&gt;AUTENTIMINE&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="595.5" y="-1226" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-108" value="&lt;b&gt;&lt;font style=&quot;font-size: 24px;&quot;&gt;RAAMATUKOGUSÜSTEEM&lt;/font&gt;&lt;/b&gt;&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 24px;&quot;&gt;(KARBITOODE)&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="-672" y="-325" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-110" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-272" y="-291" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-111" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-272" y="-274" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-115" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-593" y="-224" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-118" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-467" y="-179" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-122" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="592" y="-792" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-125" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-96" y="18.5" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-130" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-99" y="21.5" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-148" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-528" y="-206" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-152" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-467" y="-162" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-153" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="67EpyFjbCDhxdhXUx1Xu-115" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-497" y="-101" as="sourcePoint" /> <mxPoint x="-527" y="-206" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-154" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="67EpyFjbCDhxdhXUx1Xu-118" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-537" y="-101" as="sourcePoint" /> <mxPoint x="-527" y="-206" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-155" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-522" y="-106" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-166" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="510" y="-357" width="230" height="630" as="geometry" /> </mxCell> <mxCell id="wEOWZK71_5bbRY1_qstb-157" value="&lt;b&gt;TÖR&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="545" y="-124" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="wEOWZK71_5bbRY1_qstb-158" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="wEOWZK71_5bbRY1_qstb-157" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="wEOWZK71_5bbRY1_qstb-188" value="&lt;b&gt;EHIS&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="545" y="-49" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="wEOWZK71_5bbRY1_qstb-189" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="wEOWZK71_5bbRY1_qstb-188" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="wEOWZK71_5bbRY1_qstb-191" value="&lt;b&gt;TEHIK&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="545" y="27" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="wEOWZK71_5bbRY1_qstb-192" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="wEOWZK71_5bbRY1_qstb-191" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-13" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="541" y="53" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-26" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="541" y="-95" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-51" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="541" y="-21" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-167" value="&lt;b&gt;&lt;font style=&quot;font-size: 24px;&quot;&gt;RIIKLIKUD TEENUSED&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="601" y="-336" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-168" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="151.5" y="-183" width="270.5" height="236" as="geometry" /> </mxCell> <mxCell id="wEOWZK71_5bbRY1_qstb-19" value="&lt;b&gt;X-TEE TURVASERVER&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;fillColor=#FFFFFF;" parent="1" vertex="1"> <mxGeometry x="181.5" y="-147" width="211.5" height="190" as="geometry" /> </mxCell> <mxCell id="wEOWZK71_5bbRY1_qstb-20" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="wEOWZK71_5bbRY1_qstb-19" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="wEOWZK71_5bbRY1_qstb-225" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="151.5" y="-84" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="wEOWZK71_5bbRY1_qstb-228" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="165.5" y="-25" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-5" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="389.5" y="-59" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-6" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="389.5" y="-44" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-7" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="389.5" y="-75" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-75" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="178.5" y="-126" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-169" value="&lt;b&gt;&lt;font style=&quot;font-size: 24px;&quot;&gt;X-TEE&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="251.5" y="-176" width="78" height="24" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-171" value="&lt;b&gt;JDBC&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="-558" y="-172" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="67EpyFjbCDhxdhXUx1Xu-178" value="&lt;b&gt;HTTPS&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="411" y="-264" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-1" value="&lt;b&gt;LUGEJAKIRJED&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="-783" y="-152" width="195" height="100" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-2" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-1" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-3" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-593" y="-99" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-4" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-3" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-553" y="77" as="sourcePoint" /> <mxPoint x="-527" y="-106" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-5" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="67EpyFjbCDhxdhXUx1Xu-152" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-593" y="77" as="sourcePoint" /> <mxPoint x="-527" y="-106" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-6" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="518.5" y="-748" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-7" value="&lt;b&gt;TAAT&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="541" y="-1178" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-8" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-7" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-9" value="&lt;b&gt;HarID&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="540.5" y="-1102" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-10" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-9" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-13" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="536" y="-1073" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-14" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="536" y="-1150" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-15" value="&lt;b&gt;SSO&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="-150" y="-946" width="195" height="145" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-16" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-15" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-18" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-154.5" y="-872" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-20" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-459" y="-883" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-21" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-367" y="-811" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-22" value="&lt;b&gt;KASUTAJATE HALDUS&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="-475" y="-856" width="195" height="100" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-23" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-22" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-24" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-453" y="-831" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-27" value="&lt;b&gt;&lt;font style=&quot;font-size: 24px;&quot;&gt;E-KATALOOG&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="-819" y="-951" width="189" height="30" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-31" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-480" y="-819" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-32" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-545" y="-722" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-36" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-539" y="-526" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-38" value="&lt;b&gt;ANDMED&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="-799" y="-746" width="195" height="100" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-39" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-38" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-40" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-609" y="-711" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-43" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-367" y="-545" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-44" value="&lt;b&gt;E-LAENUTUS&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="-475" y="-644" width="195" height="164" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-45" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-44" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="8" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-46" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-453" y="-565" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-47" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-5" y="-516" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-49" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-480" y="-553" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-51" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-609" y="-678" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-55" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-40" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-495" y="-839" as="sourcePoint" /> <mxPoint x="-540" y="-790" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-56" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="oUjf-phy96u-tlM8c5Ax-31" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-540" y="-935" as="sourcePoint" /> <mxPoint x="-540" y="-790" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-57" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-638" y="-844" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-58" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-51" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-539" y="-500" as="sourcePoint" /> <mxPoint x="-540" y="-584" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-59" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="oUjf-phy96u-tlM8c5Ax-49" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-579" y="-500" as="sourcePoint" /> <mxPoint x="-540" y="-584" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-60" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-564" y="-505" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-61" value="&lt;b&gt;JDBC&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="-564" y="-624" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-62" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-7" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="170" y="-625" as="sourcePoint" /> <mxPoint x="250" y="-990" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-63" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="oUjf-phy96u-tlM8c5Ax-65" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="130" y="-625" as="sourcePoint" /> <mxPoint x="250" y="-990" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-64" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="31.5" y="-896" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-65" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="39.5" y="-913" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-66" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="40" y="-894" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-67" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="40.5" y="-876" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-68" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-13" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="280" y="-412" as="sourcePoint" /> <mxPoint x="250" y="-940" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-69" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="oUjf-phy96u-tlM8c5Ax-66" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="240" y="-412" as="sourcePoint" /> <mxPoint x="250" y="-940" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-70" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="287" y="-452" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-71" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="67EpyFjbCDhxdhXUx1Xu-102" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="263" y="-356" as="sourcePoint" /> <mxPoint x="260" y="-880" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-72" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="oUjf-phy96u-tlM8c5Ax-67" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="223" y="-356" as="sourcePoint" /> <mxPoint x="260" y="-880" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-73" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="296" y="-703.5" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-77" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-78" y="-857" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-80" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-125" y="-753" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-85" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-82" y="-30.5" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-86" value="&lt;b&gt;SMTP&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="-156" y="-148" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-95" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="444" y="-85" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-98" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="444" y="-40" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-101" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="440" y="23" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-109" value="&lt;b&gt;RAAMATUKOGUDE JUHTIMISTÖÖLAUD&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="-101" y="-240" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-110" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-109" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-111" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-105" y="-221" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-112" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-272" y="-255" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-115" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-54" y="38.5" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-116" value="&lt;b&gt;TAGASTUSAUTOMAAT&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="-84.5" y="114" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-117" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-116" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-118" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-88.5" y="140" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-119" value="&lt;b&gt;ISETEENINDUSKIOSK&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="-84.5" y="33" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-120" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-119" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-121" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-90" y="59" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-122" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-272" y="-226" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-123" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-272" y="-137" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-126" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-110" y="177" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-129" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-393" y="472" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-133" value="&lt;b&gt;MAKSEKESKUS&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="142" y="-609.5" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-134" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-133" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-135" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="137" y="-581.5" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-136" value="&lt;b&gt;POSTIPAKI TEENUS&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="143" y="-531.5" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-137" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-136" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-138" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="139" y="-503.5" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-144" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-813" y="-314" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-147" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="507" y="-741" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-150" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="497" y="-677" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-153" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxGeometry x="394" y="-770" width="346" height="400" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-154" value="&lt;b&gt;&lt;font style=&quot;font-size: 24px;&quot;&gt;TEISED RAAMATUKOGUSÜSTEEMID&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="466.5" y="-756" width="211.5" height="30" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-155" value="&lt;b&gt;URRAM&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="470" y="-596" width="195" height="100" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-156" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-155" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-157" value="&lt;b&gt;RIKS&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="469" y="-486" width="195" height="100" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-158" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-157" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-161" value="&lt;b&gt;SIERRA&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="470" y="-709" width="195" height="100" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-162" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-161" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-165" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="49" y="-213" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-166" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="598" y="207" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-167" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="631" y="-496" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-168" value="&lt;b&gt;RAAMATUPIDAMINE&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="145.5" y="-453.5" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-169" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-168" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-189" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="110" y="191" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-192" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-9" y="180" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-195" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-24" y="241" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-198" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-39" y="180" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-201" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="393.5" y="244" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-204" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-6" y="89" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-216" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-58.25" y="-242" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-217" value="&lt;b&gt;AVAANDMED&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="-86" y="-48.5" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-218" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-217" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-219" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-90" y="-20.5" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-220" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-738.5" y="-342" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-221" value="&lt;b&gt;VIAF&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="219" y="206" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-222" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-221" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-223" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="213.75" y="232" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-224" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-49.25" y="-48.5" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-228" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-49.25" y="31.5" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-233" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-272" y="-71" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-238" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-6" y="121" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-241" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-12" y="182" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-244" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-27" y="411" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-247" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-33" y="466" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-248" value="&lt;b&gt;DHS&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="146" y="-376.5" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-249" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-248" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-250" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="141" y="-348.5" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-251" value="&lt;b&gt;E-POSTI TEENUS&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="-88.5" y="-144" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-252" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-251" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-253" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-92.5" y="-133" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-254" value="&lt;b&gt;SMS TEENUS&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="140" y="-687.5" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-255" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="oUjf-phy96u-tlM8c5Ax-254" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-256" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="136" y="-659.5" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-263" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-802" y="-521" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-266" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-450" y="207" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="oUjf-phy96u-tlM8c5Ax-269" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-435" y="213" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="eeVNPN6zF4Vvaxnyzujw-1" value="&lt;b&gt;SKAIS2&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="544" y="-199" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="eeVNPN6zF4Vvaxnyzujw-2" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="eeVNPN6zF4Vvaxnyzujw-1" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="eeVNPN6zF4Vvaxnyzujw-3" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="540" y="-170" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="eeVNPN6zF4Vvaxnyzujw-4" value="&lt;b&gt;RR&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="542" y="-276" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="eeVNPN6zF4Vvaxnyzujw-5" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="eeVNPN6zF4Vvaxnyzujw-4" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="eeVNPN6zF4Vvaxnyzujw-6" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="538" y="-247" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="eeVNPN6zF4Vvaxnyzujw-7" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="389" y="-93" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="eeVNPN6zF4Vvaxnyzujw-8" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="389" y="-110" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="eeVNPN6zF4Vvaxnyzujw-11" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="444" y="-107" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="eeVNPN6zF4Vvaxnyzujw-14" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="442" y="-140" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="zJmoBXz0cb3khSc43_Cv-1" value="&lt;b&gt;ANDMEJÄLGIJA&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="545" y="104" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="zJmoBXz0cb3khSc43_Cv-2" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="zJmoBXz0cb3khSc43_Cv-1" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="zJmoBXz0cb3khSc43_Cv-3" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="541" y="130" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="zJmoBXz0cb3khSc43_Cv-4" value="&lt;b&gt;NÕUSOLEKUTEENUS&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="545" y="183" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="zJmoBXz0cb3khSc43_Cv-5" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="zJmoBXz0cb3khSc43_Cv-4" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="zJmoBXz0cb3khSc43_Cv-6" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="541" y="209" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="zJmoBXz0cb3khSc43_Cv-7" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="389" y="-24" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="zJmoBXz0cb3khSc43_Cv-8" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="389" y="-4" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="zJmoBXz0cb3khSc43_Cv-11" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="71" y="180" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="zJmoBXz0cb3khSc43_Cv-15" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="65" y="225" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-1" value="&lt;b&gt;SIGA&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="539.5" y="-946" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-2" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="o7gfaLgUPfEQnfdc1axc-1" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-3" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="534" y="-921" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-4" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="41.5" y="-859" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-5" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="o7gfaLgUPfEQnfdc1axc-1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="305" y="-441" as="sourcePoint" /> <mxPoint x="250" y="-840" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-6" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="o7gfaLgUPfEQnfdc1axc-4" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="265" y="-441" as="sourcePoint" /> <mxPoint x="250" y="-840" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-7" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="313" y="-446" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-8" value="&lt;b&gt;KRATT KATA&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="-86.5" y="200" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-9" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="o7gfaLgUPfEQnfdc1axc-8" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-10" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="88.5" y="232" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-12" value="&lt;b&gt;RL&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="-800" y="-572" width="195" height="100" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-13" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="o7gfaLgUPfEQnfdc1axc-12" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-14" value="&lt;b&gt;GOVSSO&lt;/b&gt;" style="html=1;dropTarget=0;whiteSpace=wrap;" parent="1" vertex="1"> <mxGeometry x="538.5" y="-868" width="180" height="70" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-15" value="" style="shape=module;jettyWidth=8;jettyHeight=4;" parent="o7gfaLgUPfEQnfdc1axc-14" vertex="1"> <mxGeometry x="1" width="20" height="20" relative="1" as="geometry"> <mxPoint x="-27" y="7" as="offset" /> </mxGeometry> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-16" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="533" y="-843" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-17" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="41.5" y="-839" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-18" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="o7gfaLgUPfEQnfdc1axc-16" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="286" y="-541" as="sourcePoint" /> <mxPoint x="250" y="-790" as="targetPoint" /> <Array as="points" /> </mxGeometry> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-19" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="o7gfaLgUPfEQnfdc1axc-17" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="246" y="-541" as="sourcePoint" /> <mxPoint x="250" y="-790" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-20" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="261" y="-546" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-26" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-311" y="-926" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-29" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-111" y="-141" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-30" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-18" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-211" y="-576" as="sourcePoint" /> <mxPoint x="-220" y="-830" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-31" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="o7gfaLgUPfEQnfdc1axc-120" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-250" y="-672" as="sourcePoint" /> <mxPoint x="-220" y="-830" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-32" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-235" y="-581" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-33" value="&lt;b&gt;HTTPS&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="-224" y="-819" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-36" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-109" y="-131" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-37" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;z39.50&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="236" y="-279" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-38" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="178" y="-143" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-39" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-105" y="-808" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-42" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="325" y="-727.5" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-43" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-368" y="-331" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-44" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-91" y="230" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-45" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-92" y="-95" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-46" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-266" y="-472" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-49" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-100" y="-162" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-52" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-100" y="-98" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-53" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-51" y="-472" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-56" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-73" y="-499" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-57" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-78" y="-471" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-60" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-66" y="-500" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-61" value="&lt;b&gt;HTTPS&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="214.5" y="-1043" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-64" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-153" y="-18" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-65" value="&lt;b&gt;OAIBMH&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="-160" y="-85" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-68" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-174" y="73" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-69" value="&lt;b&gt;SIP2&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="-160" y="-14" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-70" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-370" y="-469" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-71" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="o7gfaLgUPfEQnfdc1axc-43" target="o7gfaLgUPfEQnfdc1axc-73" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-345" y="-387" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-72" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="o7gfaLgUPfEQnfdc1axc-70" target="o7gfaLgUPfEQnfdc1axc-73" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-408" y="-321" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-73" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-370" y="-392" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-76" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-153" y="102" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-77" value="&lt;b&gt;SIP2&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="-170" y="47" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-78" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-452" y="-536" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-82" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-528" y="-407" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-84" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-713" y="-652" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-85" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-714" y="-577" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-88" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-713.5" y="-616" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-89" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="o7gfaLgUPfEQnfdc1axc-84" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-644" y="-608" as="sourcePoint" /> <mxPoint x="-708" y="-612" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-90" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;entryX=0.45;entryY=1.4;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="o7gfaLgUPfEQnfdc1axc-85" target="o7gfaLgUPfEQnfdc1axc-88" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-685" y="-610" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-91" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-670" y="-615" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-92" value="&lt;b&gt;JDBC&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="-705" y="-627" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-93" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-105" y="-203" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-94" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="139.5" y="-424.5" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-101" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-152" y="202" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-105" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="114" y="228" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-110" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-506" y="-393" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-113" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-526" y="-379" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-114" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-100" y="-471" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-118" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-5" y="-587" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-119" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-5" y="-652" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-120" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-285" y="-814" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-123" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="697" y="-1069" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="o7gfaLgUPfEQnfdc1axc-129" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="708" y="-970" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-1" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="h7I94wl3OvkxDaiovNsW-67" target="h7I94wl3OvkxDaiovNsW-3" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="124" y="-721" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-2" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="h7I94wl3OvkxDaiovNsW-4" target="h7I94wl3OvkxDaiovNsW-3" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="84" y="-720" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-3" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="99" y="-726" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-4" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-4" y="-722" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-6" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-254" target="h7I94wl3OvkxDaiovNsW-8" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="57" y="-649" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-7" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="o7gfaLgUPfEQnfdc1axc-119" target="h7I94wl3OvkxDaiovNsW-8" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="17" y="-649" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-8" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="32" y="-654" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-12" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-133" target="h7I94wl3OvkxDaiovNsW-14" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="57" y="-582" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-13" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="o7gfaLgUPfEQnfdc1axc-118" target="h7I94wl3OvkxDaiovNsW-14" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="17" y="-582" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-14" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="32" y="-587" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-15" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-136" target="h7I94wl3OvkxDaiovNsW-17" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="62" y="-505" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-16" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="oUjf-phy96u-tlM8c5Ax-47" target="h7I94wl3OvkxDaiovNsW-17" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="22" y="-505" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-17" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="37" y="-510" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-18" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-168" target="h7I94wl3OvkxDaiovNsW-20" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="65" y="-436" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-19" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="o7gfaLgUPfEQnfdc1axc-53" target="h7I94wl3OvkxDaiovNsW-20" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="25" y="-436" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-20" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="40" y="-441" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-24" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-250" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="67" y="-388" as="sourcePoint" /> <mxPoint x="40" y="-400" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-25" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="o7gfaLgUPfEQnfdc1axc-57" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="27" y="-388" as="sourcePoint" /> <mxPoint x="40" y="-400" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-26" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="128" y="-393" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-27" value="&lt;b&gt;HTTPS&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="60" y="-555" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-29" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="eeVNPN6zF4Vvaxnyzujw-4" target="h7I94wl3OvkxDaiovNsW-31" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="484" y="-217" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-30" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;exitX=1;exitY=0.25;exitDx=0;exitDy=0;" parent="1" source="wEOWZK71_5bbRY1_qstb-19" target="h7I94wl3OvkxDaiovNsW-31" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="444" y="-217" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-31" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="459" y="-222" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-34" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="27" y="-355" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-35" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="eeVNPN6zF4Vvaxnyzujw-1" target="h7I94wl3OvkxDaiovNsW-37" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="494" y="-157" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-36" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="eeVNPN6zF4Vvaxnyzujw-7" target="h7I94wl3OvkxDaiovNsW-37" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="454" y="-157" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-37" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="469" y="-162" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-38" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="wEOWZK71_5bbRY1_qstb-157" target="h7I94wl3OvkxDaiovNsW-40" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="494" y="-100" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-39" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="67EpyFjbCDhxdhXUx1Xu-7" target="h7I94wl3OvkxDaiovNsW-40" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="454" y="-100" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-40" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="469" y="-105" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-41" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="wEOWZK71_5bbRY1_qstb-188" target="h7I94wl3OvkxDaiovNsW-43" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="494" y="-31" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-42" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="67EpyFjbCDhxdhXUx1Xu-5" target="h7I94wl3OvkxDaiovNsW-43" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="460" y="-31" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-43" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="469" y="-36" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-45" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="wEOWZK71_5bbRY1_qstb-191" target="h7I94wl3OvkxDaiovNsW-47" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="492" y="32" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-46" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="67EpyFjbCDhxdhXUx1Xu-6" target="h7I94wl3OvkxDaiovNsW-47" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="452" y="32" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-47" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="467" y="27" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-48" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="zJmoBXz0cb3khSc43_Cv-1" target="h7I94wl3OvkxDaiovNsW-50" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="490" y="73" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-49" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="zJmoBXz0cb3khSc43_Cv-7" target="h7I94wl3OvkxDaiovNsW-50" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="450" y="73" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-50" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="465" y="68" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-51" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="zJmoBXz0cb3khSc43_Cv-4" target="h7I94wl3OvkxDaiovNsW-53" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="486" y="121" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-52" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="zJmoBXz0cb3khSc43_Cv-8" target="h7I94wl3OvkxDaiovNsW-53" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="446" y="121" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-53" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="461" y="116" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-57" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="o7gfaLgUPfEQnfdc1axc-10" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="176" y="214" as="sourcePoint" /> <mxPoint x="160" y="237" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-58" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="oUjf-phy96u-tlM8c5Ax-223" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="136" y="214" as="sourcePoint" /> <mxPoint x="160" y="237" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-59" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="151" y="209" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-60" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="o7gfaLgUPfEQnfdc1axc-46" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-176" y="-418" as="sourcePoint" /> <mxPoint x="-140" y="-320" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-61" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;exitX=0;exitY=0.25;exitDx=0;exitDy=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-109" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-216" y="-418" as="sourcePoint" /> <mxPoint x="-140" y="-320" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-62" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-201" y="-423" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-63" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="67EpyFjbCDhxdhXUx1Xu-111" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-174" y="-264" as="sourcePoint" /> <mxPoint x="-150" y="-220" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-64" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="o7gfaLgUPfEQnfdc1axc-93" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-214" y="-264" as="sourcePoint" /> <mxPoint x="-150" y="-220" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-65" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-199" y="-269" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-66" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="434" y="-375" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-67" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="389" y="-729" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-68" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="67EpyFjbCDhxdhXUx1Xu-110" target="h7I94wl3OvkxDaiovNsW-70" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="292" y="-237" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-69" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="h7I94wl3OvkxDaiovNsW-66" target="h7I94wl3OvkxDaiovNsW-70" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="252" y="-237" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-70" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="267" y="-242" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-74" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-233" target="h7I94wl3OvkxDaiovNsW-76" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-149" y="156" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-75" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="o7gfaLgUPfEQnfdc1axc-44" target="h7I94wl3OvkxDaiovNsW-76" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-189" y="156" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-76" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-174" y="151" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-77" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;exitX=0;exitY=0.75;exitDx=0;exitDy=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-251" target="h7I94wl3OvkxDaiovNsW-79" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-146" y="-112" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-78" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="oUjf-phy96u-tlM8c5Ax-112" target="h7I94wl3OvkxDaiovNsW-79" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-186" y="-112" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-79" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-171" y="-117" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-80" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-285" y="-471" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-81" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-253" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-136" y="-281" as="sourcePoint" /> <mxPoint x="-170" y="-300" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-82" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="h7I94wl3OvkxDaiovNsW-80" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-176" y="-281" as="sourcePoint" /> <mxPoint x="-170" y="-300" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-83" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-161" y="-286" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-84" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-219" target="h7I94wl3OvkxDaiovNsW-86" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-149" y="-69" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-85" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="oUjf-phy96u-tlM8c5Ax-122" target="h7I94wl3OvkxDaiovNsW-86" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-189" y="-69" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-86" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-174" y="-74" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-87" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="oUjf-phy96u-tlM8c5Ax-123" target="h7I94wl3OvkxDaiovNsW-89" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-143" y="6" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-88" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="oUjf-phy96u-tlM8c5Ax-121" target="h7I94wl3OvkxDaiovNsW-89" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-183" y="6" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-89" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-168" y="1" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-90" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1"> <mxGeometry x="-272" y="-101" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-91" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="h7I94wl3OvkxDaiovNsW-90" target="h7I94wl3OvkxDaiovNsW-93" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-150" y="63" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-92" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="oUjf-phy96u-tlM8c5Ax-118" target="h7I94wl3OvkxDaiovNsW-93" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-190" y="63" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-93" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-175" y="58" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-96" value="" style="endArrow=none;html=1;rounded=0;curved=0;strokeWidth=4;Dashed=1;dashed=1;dashPattern=12 12;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="-840" y="-1040" as="sourcePoint" /> <mxPoint x="80" y="-1040" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-97" value="" style="endArrow=none;html=1;rounded=0;strokeWidth=4;dashed=1;dashPattern=12 12;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="80" y="-360" as="sourcePoint" /> <mxPoint x="80" y="-1040" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-98" value="" style="endArrow=none;html=1;rounded=0;strokeWidth=4;dashed=1;dashPattern=12 12;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="-220" y="-360" as="sourcePoint" /> <mxPoint x="80" y="-360" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-99" value="" style="endArrow=none;html=1;rounded=0;strokeWidth=4;dashed=1;dashPattern=12 12;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="-220" y="130" as="sourcePoint" /> <mxPoint x="-220" y="-360" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-100" value="" style="endArrow=none;html=1;rounded=0;strokeWidth=4;dashed=1;dashPattern=12 12;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="-840" y="130" as="sourcePoint" /> <mxPoint x="-220" y="130" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h7I94wl3OvkxDaiovNsW-101" value="" style="endArrow=none;html=1;rounded=0;strokeWidth=4;dashed=1;dashPattern=12 12;" parent="1" edge="1"> <mxGeometry width="50" height="50" relative="1" as="geometry"> <mxPoint x="-840" y="130" as="sourcePoint" /> <mxPoint x="-840" y="-1040" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="4u1Am2T74nyX0XZLRTXn-2" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="o7gfaLgUPfEQnfdc1axc-38" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-38" y="-337" as="sourcePoint" /> <mxPoint x="40" y="-330" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="4u1Am2T74nyX0XZLRTXn-3" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="o7gfaLgUPfEQnfdc1axc-39" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-78" y="-337" as="sourcePoint" /> <mxPoint x="40" y="-330" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="4u1Am2T74nyX0XZLRTXn-4" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-63" y="-342" width="10" height="10" as="geometry" /> </mxCell> <mxCell id="4u1Am2T74nyX0XZLRTXn-5" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;" parent="1" source="67EpyFjbCDhxdhXUx1Xu-75" target="4u1Am2T74nyX0XZLRTXn-7" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="20" y="-321" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="4u1Am2T74nyX0XZLRTXn-6" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;" parent="1" source="o7gfaLgUPfEQnfdc1axc-114" target="4u1Am2T74nyX0XZLRTXn-7" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="-20" y="-321" as="sourcePoint" /> </mxGeometry> </mxCell> <mxCell id="4u1Am2T74nyX0XZLRTXn-7" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1"> <mxGeometry x="-5" y="-326" width="10" height="10" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> <mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/28.2.5 Chrome/138.0.7204.251 Electron/37.6.1 Safari/537.36" version="28.2.5"> <diagram name="Page-1" id="oNleB83aHbOxi-92VLvC"> <mxGraphModel dx="1360" dy="843" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="kub0LxlAa1LwtY0CM2nD-150" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;TIS&lt;/font&gt;&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="1242" y="40" width="150" height="840" as="geometry" /> </mxCell> <mxCell id="uEXsSlVwp3ZI-1kdxP7S-1" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="kub0LxlAa1LwtY0CM2nD-150" vertex="1"> <mxGeometry x="69" y="585" width="10" height="37" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-151" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;SKAIS2&lt;/font&gt;&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="1061" y="40" width="150" height="840" as="geometry" /> </mxCell> <mxCell id="uEXsSlVwp3ZI-1kdxP7S-2" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="kub0LxlAa1LwtY0CM2nD-151" vertex="1"> <mxGeometry x="70" y="649" width="10" height="37" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-152" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;SSO&lt;/font&gt;&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="177" y="40" width="100" height="840" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-153" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="kub0LxlAa1LwtY0CM2nD-152" vertex="1"> <mxGeometry x="45" y="98" width="10" height="62" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-162" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;RR&lt;/font&gt;&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="682" y="41" width="150" height="839" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-164" value="" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};participant=umlActor;fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="49" y="40" width="20" height="840" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-165" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;E-KATALOOG&lt;/font&gt;&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="336" y="41" width="134" height="839" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-166" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="kub0LxlAa1LwtY0CM2nD-165" vertex="1"> <mxGeometry x="61" y="74" width="10" height="366" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-268" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="kub0LxlAa1LwtY0CM2nD-165" vertex="1"> <mxGeometry x="-282" y="200" width="10" height="90" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-236" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="kub0LxlAa1LwtY0CM2nD-165" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="61" y="210" as="sourcePoint" /> <mxPoint x="-272" y="210" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-251" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="kub0LxlAa1LwtY0CM2nD-165" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="-272" y="271" as="sourcePoint" /> <mxPoint x="61" y="271" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-33" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="kub0LxlAa1LwtY0CM2nD-165" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="-272" y="497" as="sourcePoint" /> <mxPoint x="61" y="497" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-167" value="&lt;b&gt;&lt;font style=&quot;font-size: 18px;&quot;&gt;KASUTAJA&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=#000000;fontColor=#FFFFFF;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="73" y="127" width="100" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-168" value="&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;b&gt;kasutaja siseneb E-kataloogi&lt;/b&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="34" y="86" width="370" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-169" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;X-TEE TURVASERVER&lt;/font&gt;&lt;/b&gt;" style="shape=umlLifeline;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};points=[];perimeter=rectanglePerimeter;targetShapes=umlLifeline;participant=label;fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="500" y="42" width="150" height="838" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-170" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="kub0LxlAa1LwtY0CM2nD-169" vertex="1"> <mxGeometry x="70" y="270" width="10" height="150" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-172" value="" style="html=1;verticalAlign=bottom;startArrow=oval;endArrow=block;startSize=8;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontStyle=1;fillColor=#E6E6E6;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="60" y="114" as="sourcePoint" /> <mxPoint x="397" y="114" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-173" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="397" y="152" as="sourcePoint" /> <mxPoint x="232" y="152" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-174" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry x="0.0061" relative="1" as="geometry"> <mxPoint x="232" y="187" as="sourcePoint" /> <mxPoint x="397" y="187" as="targetPoint" /> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-175" value="&lt;b&gt;&lt;font style=&quot;font-size: 18px;&quot;&gt;autentimine&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="282" y="118" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-176" value="&lt;b&gt;&lt;font style=&quot;font-size: 18px;&quot;&gt;identsustõend&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="231" y="157" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-181" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;andmepäring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="425" y="357" width="123" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-190" value="&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;b&gt;eduka autentimise teavitus&lt;/b&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="113" y="224" width="237" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-201" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="580" y="691.5" as="sourcePoint" /> <mxPoint x="1131" y="691.5" as="targetPoint" /> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-202" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;isiku diagnoosi päring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="622" y="664" width="410" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-203" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="1131" y="724.5" as="sourcePoint" /> <mxPoint x="580" y="724.5" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-204" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus JSON vormingus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="673" y="693" width="300" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-211" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="580" y="626" as="sourcePoint" /> <mxPoint x="1311" y="626" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-212" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;tervisetõendi andmepäring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="656" y="595" width="470" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-213" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="1311" y="658.5" as="sourcePoint" /> <mxPoint x="580" y="658.5" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-214" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus JSON vormingus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="683" y="627" width="410" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-252" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;taotluse täitmine / kasutaja andmete uuendamine&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="90" y="270" width="280" height="30" as="geometry" /> </mxCell> <mxCell id="h67VQ5K-9jbJ9AsO70Fa-15" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" target="u6WP79g-NGMMWc4km8Pc-14" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="580" y="409.0000000000002" as="sourcePoint" /> <mxPoint x="944" y="409" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h67VQ5K-9jbJ9AsO70Fa-16" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;lapsevanema / eestkostja päring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="608" y="362" width="122" height="30" as="geometry" /> </mxCell> <mxCell id="h67VQ5K-9jbJ9AsO70Fa-17" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="753" y="457" as="sourcePoint" /> <mxPoint x="580" y="457" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h67VQ5K-9jbJ9AsO70Fa-18" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus JSON vormingus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="585" y="418" width="173" height="28.5" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-14" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="753" y="410" width="10" height="50" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-15" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;NÕUSOLEKUTEENUS&lt;/font&gt;&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="862" y="40" width="170" height="840" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-45" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="u6WP79g-NGMMWc4km8Pc-15" vertex="1"> <mxGeometry x="80" y="510" width="10" height="37" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-27" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" target="P0qnOR_1AbnGMUpXNbap-21" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="397" y="476" as="sourcePoint" /> <mxPoint x="58.25" y="476" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-28" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;kasutaja saab teavituse, et järgmiste päringute teostamiseks on vajalik tema nõusolek&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="100" y="419" width="230" height="30" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-34" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;kasutaja annab nõusoleku andmete pärimiseks tema kohta&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="87" y="490" width="280" height="30" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-46" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="580" y="551" as="sourcePoint" /> <mxPoint x="941.9999999999995" y="551" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-47" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;nõusoleku andmine SKAIS2 ja TIS isikuandmetega päringuteks&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="610" y="510" width="290" height="30" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-48" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="941.9999999999995" y="586.5" as="sourcePoint" /> <mxPoint x="580" y="586.5" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-49" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus JSON vormingus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="611" y="553" width="290" height="30" as="geometry" /> </mxCell> <mxCell id="YldeBLcHBMvm3fcfI_cv-19" value="" style="html=1;align=left;spacingLeft=2;endArrow=block;rounded=0;edgeStyle=orthogonalEdgeStyle;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="408" y="744" as="sourcePoint" /> <Array as="points"> <mxPoint x="438" y="774" /> </Array> <mxPoint x="413" y="773.9999999999995" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="YldeBLcHBMvm3fcfI_cv-20" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;soodustatud kasutaja loomine / kasutaja andmete uuendamine&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="449" y="744" width="560" height="30" as="geometry" /> </mxCell> <mxCell id="YldeBLcHBMvm3fcfI_cv-21" value="&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;b&gt;&quot;soodustusega kasutaja loodud&quot; / &quot;kasutaja andmed uuendatud&quot;&lt;/b&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="85" y="757" width="285.5" height="30" as="geometry" /> </mxCell> <mxCell id="YldeBLcHBMvm3fcfI_cv-23" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="396" y="800" as="sourcePoint" /> <mxPoint x="65" y="800" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-4" value="" style="html=1;align=left;spacingLeft=2;endArrow=block;rounded=0;edgeStyle=orthogonalEdgeStyle;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="409" y="319" as="sourcePoint" /> <Array as="points"> <mxPoint x="439" y="349" /> </Array> <mxPoint x="414" y="349" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-5" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;taotluse täitmine&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="430" y="319" width="120" height="30" as="geometry" /> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-6" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="407" y="388" as="sourcePoint" /> <mxPoint x="570" y="388" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-7" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="570" y="457.9999999999998" as="sourcePoint" /> <mxPoint x="407" y="457.9999999999998" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-8" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="413" y="426" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-9" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;andmepäring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="423" y="519" width="123" height="30" as="geometry" /> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-10" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" target="P0qnOR_1AbnGMUpXNbap-16" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="408" y="545" as="sourcePoint" /> <mxPoint x="571" y="545" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-12" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="570" y="588.9999999999998" as="sourcePoint" /> <mxPoint x="407" y="588.9999999999998" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-13" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="413" y="557" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-14" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="406" y="625" as="sourcePoint" /> <mxPoint x="569" y="625" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-15" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;andmepäring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="430" y="592" width="123" height="30" as="geometry" /> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-16" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="570" y="540" width="10" height="50" as="geometry" /> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-17" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="570" y="623" width="10" height="37" as="geometry" /> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-18" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="567" y="658.9999999999998" as="sourcePoint" /> <mxPoint x="404" y="658.9999999999998" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-19" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="410" y="627" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-20" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="396" y="536" width="10" height="264" as="geometry" /> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-21" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="55" y="478" width="10" height="72" as="geometry" /> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-22" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="570" y="690" width="10" height="37" as="geometry" /> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-23" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;andmepäring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="426" y="660" width="123" height="30" as="geometry" /> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-24" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="408" y="691" as="sourcePoint" /> <mxPoint x="571" y="691" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-27" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="569" y="725.9999999999998" as="sourcePoint" /> <mxPoint x="406" y="725.9999999999998" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-28" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="412" y="693" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="P0qnOR_1AbnGMUpXNbap-29" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="55" y="799" width="10" height="40" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> <mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/28.2.5 Chrome/138.0.7204.251 Electron/37.6.1 Safari/537.36" version="28.2.5"> <diagram name="Page-1" id="oNleB83aHbOxi-92VLvC"> <mxGraphModel dx="1360" dy="843" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="kub0LxlAa1LwtY0CM2nD-150" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;TÖR&lt;/font&gt;&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="1435" y="40" width="150" height="1240" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-151" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;EHIS&lt;/font&gt;&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="1254" y="40" width="150" height="1250" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-152" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;SSO&lt;/font&gt;&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="177" y="40" width="100" height="1240" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-153" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="kub0LxlAa1LwtY0CM2nD-152" vertex="1"> <mxGeometry x="45" y="98" width="10" height="62" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-162" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;RR&lt;/font&gt;&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="1067" y="41" width="150" height="1239" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-164" value="" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=1;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};participant=umlActor;fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="49" y="40" width="20" height="1240" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-165" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;E-KATALOOG&lt;/font&gt;&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="336" y="41" width="134" height="1239" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-166" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="kub0LxlAa1LwtY0CM2nD-165" vertex="1"> <mxGeometry x="61" y="74" width="10" height="356" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-268" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="kub0LxlAa1LwtY0CM2nD-165" vertex="1"> <mxGeometry x="-282" y="200" width="10" height="90" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-236" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="kub0LxlAa1LwtY0CM2nD-165" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="61" y="204" as="sourcePoint" /> <mxPoint x="-272" y="204" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-251" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="kub0LxlAa1LwtY0CM2nD-165" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="-272" y="283" as="sourcePoint" /> <mxPoint x="61" y="283" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-23" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="kub0LxlAa1LwtY0CM2nD-165" vertex="1"> <mxGeometry x="61" y="839" width="10" height="321" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-11" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="kub0LxlAa1LwtY0CM2nD-165" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="-272" y="841" as="sourcePoint" /> <mxPoint x="61" y="841" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-167" value="&lt;b&gt;&lt;font style=&quot;font-size: 18px;&quot;&gt;KASUTAJA&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=#000000;fontColor=#FFFFFF;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="73" y="127" width="100" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-168" value="&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;b&gt;kasutaja siseneb E-kataloogi&lt;/b&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="34" y="86" width="370" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-169" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;X-TEE TURVASERVER&lt;/font&gt;&lt;/b&gt;" style="shape=umlLifeline;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};points=[];perimeter=rectanglePerimeter;targetShapes=umlLifeline;participant=label;fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="500" y="44" width="150" height="1236" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-170" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="kub0LxlAa1LwtY0CM2nD-169" vertex="1"> <mxGeometry x="70" y="374" width="10" height="60" as="geometry" /> </mxCell> <mxCell id="uEXsSlVwp3ZI-1kdxP7S-1" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="kub0LxlAa1LwtY0CM2nD-169" vertex="1"> <mxGeometry x="1004.5" y="610" width="10" height="37" as="geometry" /> </mxCell> <mxCell id="HJqJynQstKLmOX3CUcZ4-71" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="kub0LxlAa1LwtY0CM2nD-169" vertex="1"> <mxGeometry x="70" y="686" width="10" height="43" as="geometry" /> </mxCell> <mxCell id="uEXsSlVwp3ZI-1kdxP7S-2" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="kub0LxlAa1LwtY0CM2nD-169" vertex="1"> <mxGeometry x="824" y="686" width="10" height="37" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-172" value="" style="html=1;verticalAlign=bottom;startArrow=oval;endArrow=block;startSize=8;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontStyle=1;fillColor=#E6E6E6;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="60" y="114" as="sourcePoint" /> <mxPoint x="397" y="114" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-173" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="397" y="152" as="sourcePoint" /> <mxPoint x="232" y="152" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-174" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry x="0.0061" relative="1" as="geometry"> <mxPoint x="232" y="187" as="sourcePoint" /> <mxPoint x="397" y="187" as="targetPoint" /> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-175" value="&lt;b&gt;&lt;font style=&quot;font-size: 18px;&quot;&gt;autentimine&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="282" y="118" width="60" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-176" value="&lt;b&gt;&lt;font style=&quot;font-size: 18px;&quot;&gt;identsustõend&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="231" y="157" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-190" value="&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;b&gt;eduka autentimise teavitus&lt;/b&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="113" y="214" width="237" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-201" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;entryX=0.483;entryY=0.402;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="580" y="732.5999999999999" as="sourcePoint" /> <mxPoint x="1326.4500000000003" y="732.5999999999999" as="targetPoint" /> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-202" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;haridustöötaja töösuhte päring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="743" y="701" width="410" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-203" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;exitX=0.483;exitY=0.4;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="1326.4500000000003" y="766" as="sourcePoint" /> <mxPoint x="580" y="766" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-204" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus JSON vormingus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="756" y="733" width="410" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-211" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="581" y="655" as="sourcePoint" /> <mxPoint x="1504.4999999999995" y="655" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-212" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;isiku töötamise päring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="957" y="620" width="273" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-213" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="1504.4999999999995" y="689.5000000000002" as="sourcePoint" /> <mxPoint x="581" y="689.5000000000002" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-214" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus JSON vormingus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="910" y="654" width="410" height="30" as="geometry" /> </mxCell> <mxCell id="kub0LxlAa1LwtY0CM2nD-252" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;väljaannete valimine&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="90" y="287" width="250" height="30" as="geometry" /> </mxCell> <mxCell id="h67VQ5K-9jbJ9AsO70Fa-15" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" target="u6WP79g-NGMMWc4km8Pc-14" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="580" y="421.0000000000002" as="sourcePoint" /> <mxPoint x="1123" y="421.0000000000002" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h67VQ5K-9jbJ9AsO70Fa-16" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;lapsevanema / eestkostja päring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="627" y="387" width="410" height="30" as="geometry" /> </mxCell> <mxCell id="h67VQ5K-9jbJ9AsO70Fa-17" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="1136.9999999999995" y="454.5" as="sourcePoint" /> <mxPoint x="580" y="454.5" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="h67VQ5K-9jbJ9AsO70Fa-18" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus JSON vormingus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="671.5" y="425" width="300" height="30" as="geometry" /> </mxCell> <mxCell id="HJqJynQstKLmOX3CUcZ4-73" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry x="0.006" width="80" relative="1" as="geometry"> <mxPoint x="408" y="733.0000000000002" as="sourcePoint" /> <mxPoint x="570" y="733.0000000000002" as="targetPoint" /> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="HJqJynQstKLmOX3CUcZ4-75" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;dashed=1;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="571" y="691" as="sourcePoint" /> <mxPoint x="408" y="691" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-14" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="1137" y="418" width="10" height="37" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-15" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;NÕUSOLEKUTEENUS&lt;/font&gt;&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="867" y="43" width="170" height="1237" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-21" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;dashed=1;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="749" y="291.5" as="sourcePoint" /> <mxPoint x="407" y="291.5" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-22" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="500" y="257" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-27" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" target="s8FXySFB8iG4pd8S0nh0-26" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="397" y="471" as="sourcePoint" /> <mxPoint x="57.96153846153857" y="471" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-28" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;kasutaja saab teavituse, et järgmiste päringute teostamiseks on vajalik tema nõusolek&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="90" y="412.5" width="280" height="30" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-33" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="64" y="561" as="sourcePoint" /> <mxPoint x="398" y="561" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-34" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;kasutaja annab nõusoleku andmete pärimiseks tema kohta&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="102" y="510" width="240" height="30" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-38" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="571" y="654" width="10" height="46" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-42" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;andmepäring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="490" y="214" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-46" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="581" y="564" as="sourcePoint" /> <mxPoint x="947" y="564" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-47" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;nõusoleku andmine EHIS ja TÖR isikuandmetega päringuteks&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="591" y="521" width="334" height="30" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-48" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="947" y="602.4999999999998" as="sourcePoint" /> <mxPoint x="581" y="602.4999999999998" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-49" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus JSON vormingus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="586" y="566.5" width="339" height="30" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-51" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="947" y="560" width="10" height="43" as="geometry" /> </mxCell> <mxCell id="u6WP79g-NGMMWc4km8Pc-52" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry x="0.006" width="80" relative="1" as="geometry"> <mxPoint x="407" y="252" as="sourcePoint" /> <mxPoint x="749" y="252" as="targetPoint" /> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="YldeBLcHBMvm3fcfI_cv-21" value="&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;b&gt;&quot;tellimus edukalt tehtud&quot;&lt;/b&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="97" y="1168" width="250" height="30" as="geometry" /> </mxCell> <mxCell id="YldeBLcHBMvm3fcfI_cv-23" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" source="s8FXySFB8iG4pd8S0nh0-23" target="s8FXySFB8iG4pd8S0nh0-38" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="932" y="1744.5" as="sourcePoint" /> <mxPoint x="66" y="1745" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-1" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;ANDMEJÄLGIJA&lt;/font&gt;&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="1606" y="39" width="170" height="1251" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-3" value="&lt;b&gt;POSTIPAKITEENUS&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="1797" y="38" width="170" height="1242" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-4" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="mGfeUK3ojMT5PZYEKb7w-3" vertex="1"> <mxGeometry x="80" y="1002" width="10" height="37" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-6" value="&lt;b&gt;MAKSEKESKUS&lt;/b&gt;" style="shape=umlLifeline;perimeter=lifelinePerimeter;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="1989" y="37" width="170" height="1243" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-7" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="mGfeUK3ojMT5PZYEKb7w-6" vertex="1"> <mxGeometry x="80" y="1084" width="10" height="37" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-9" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="398" y="789.5000000000002" as="sourcePoint" /> <mxPoint x="64" y="789.5000000000002" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-12" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;kasutaja alustab makseandmete ja pakiautomaadi andmete täitmist&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="76" y="830" width="316" height="30" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-17" value="&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;b&gt;&quot;Alusta makseandmete ja pakiautomaadi andmete täitmist&quot;&lt;/b&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="69" y="750" width="330" height="30" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-22" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="569" y="1119" width="10" height="51" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-27" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="581" y="964.4999999999995" as="sourcePoint" /> <mxPoint x="1685.5" y="964.4999999999995" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-28" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="1685.5" y="998.5" as="sourcePoint" /> <mxPoint x="581" y="998.5" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-29" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus JSON vormingus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="911" y="964" width="410" height="30" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-33" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;isikuandmete kajastamine andmejälgija teenuses&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="844" y="926.5" width="560" height="30" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-35" value="" style="html=1;align=left;spacingLeft=2;endArrow=block;rounded=0;edgeStyle=orthogonalEdgeStyle;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="410" y="896" as="sourcePoint" /> <Array as="points"> <mxPoint x="440" y="926" /> </Array> <mxPoint x="415" y="926" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-36" value="&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;b&gt;makse kinnitamine ja isikuandmete logimine&lt;/b&gt;&lt;/span&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="439" y="890" width="216" height="30" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-47" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;dashed=1;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="571" y="1000" as="sourcePoint" /> <mxPoint x="407" y="1000" as="targetPoint" /> <Array as="points"> <mxPoint x="530" y="1000" /> </Array> </mxGeometry> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-48" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="409" y="968" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-49" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry x="0.006" width="80" relative="1" as="geometry"> <mxPoint x="407" y="964.5" as="sourcePoint" /> <mxPoint x="571" y="964.5" as="targetPoint" /> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-50" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;andmepäring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="414" y="934" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-51" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="581" y="1041.5" as="sourcePoint" /> <mxPoint x="1876.9999999999995" y="1041.5" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-52" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;pakiautomaadi tellimuse andmed&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="971.5" y="1006" width="373" height="30" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-53" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;exitX=0.508;exitY=0.575;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="1883.3599999999997" y="1076" as="sourcePoint" /> <mxPoint x="581" y="1076" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-55" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus JSON vormingus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="953" y="1042.5" width="410" height="30" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-61" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="579" y="1123.5" as="sourcePoint" /> <mxPoint x="2069" y="1123.5" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-62" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="2070" y="1160.5" as="sourcePoint" /> <mxPoint x="580" y="1160.5" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-63" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;makseandmed&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="1123" y="1087" width="218" height="30" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-64" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus JSON vormingus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="1088" y="1126.5" width="319" height="30" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-1" value="" style="html=1;align=left;spacingLeft=2;endArrow=block;rounded=0;edgeStyle=orthogonalEdgeStyle;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="410" y="326" as="sourcePoint" /> <Array as="points"> <mxPoint x="440" y="356" /> </Array> <mxPoint x="415" y="356" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-2" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;lisamine ostukorvi ja tellimuse kinnitamine&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="440" y="325" width="120" height="30" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-3" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;ÜÜRS RAKENDUS&lt;/font&gt;&lt;/b&gt;" style="shape=umlLifeline;whiteSpace=wrap;html=1;container=0;dropTarget=0;collapsible=0;recursiveResize=0;outlineConnect=0;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};points=[];perimeter=rectanglePerimeter;targetShapes=umlLifeline;participant=label;fillColor=#E6E6E6;" parent="1" vertex="1"> <mxGeometry x="679" y="44" width="150" height="1236" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-4" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="s8FXySFB8iG4pd8S0nh0-3" vertex="1"> <mxGeometry x="70" y="207" width="10" height="43" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-6" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;andmepäring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="411" y="387" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-7" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry x="0.006" width="80" relative="1" as="geometry"> <mxPoint x="407" y="420" as="sourcePoint" /> <mxPoint x="570" y="420" as="targetPoint" /> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-8" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;dashed=1;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="570" y="457" as="sourcePoint" /> <mxPoint x="407" y="457" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-9" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="411" y="425" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-10" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="398" y="559" width="10" height="231" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-11" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="571" y="561" width="10" height="60" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-12" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;andmepäring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="409" y="520" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-13" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry x="0.006" width="80" relative="1" as="geometry"> <mxPoint x="408" y="561" as="sourcePoint" /> <mxPoint x="571" y="561" as="targetPoint" /> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-14" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="411" y="572" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-15" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="571" y="610" as="sourcePoint" /> <mxPoint x="408" y="610" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-16" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;andmepäring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="411" y="618" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-17" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" target="u6WP79g-NGMMWc4km8Pc-38" edge="1"> <mxGeometry x="0.006" width="80" relative="1" as="geometry"> <mxPoint x="410" y="655" as="sourcePoint" /> <mxPoint x="573" y="655" as="targetPoint" /> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-19" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="410" y="659" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-20" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;andmepäring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="411" y="701" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-21" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="414" y="737" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-22" value="" style="html=1;verticalAlign=bottom;endArrow=open;dashed=1;endSize=8;curved=0;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;" parent="1" edge="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="574" y="770" as="sourcePoint" /> <mxPoint x="408" y="770" as="targetPoint" /> </mxGeometry> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-24" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="571" y="960" width="10" height="43" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-25" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="54" y="788" width="10" height="102" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-26" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="53" y="474" width="10" height="90" as="geometry" /> </mxCell> <mxCell id="mGfeUK3ojMT5PZYEKb7w-2" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="1685.5" y="960" width="10" height="37" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-27" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="571" y="1036" width="10" height="43" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-28" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;dashed=1;" parent="1" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="575" y="1073" as="sourcePoint" /> <mxPoint x="411" y="1073" as="targetPoint" /> <Array as="points"> <mxPoint x="534" y="1073" /> </Array> </mxGeometry> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-29" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="413" y="1041" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-30" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" target="s8FXySFB8iG4pd8S0nh0-27" edge="1"> <mxGeometry x="0.006" width="80" relative="1" as="geometry"> <mxPoint x="411" y="1037.5" as="sourcePoint" /> <mxPoint x="575" y="1037.5" as="targetPoint" /> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-32" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;andmepäring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="418" y="1006" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-34" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;dashed=1;" parent="1" target="s8FXySFB8iG4pd8S0nh0-23" edge="1"> <mxGeometry width="80" relative="1" as="geometry"> <mxPoint x="574" y="1155.48" as="sourcePoint" /> <mxPoint x="410" y="1155.48" as="targetPoint" /> <Array as="points"> <mxPoint x="533" y="1155.48" /> </Array> </mxGeometry> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-35" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;päringu vastus&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="410" y="1122.48" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-36" value="" style="html=1;verticalAlign=bottom;endArrow=block;curved=0;rounded=0;" parent="1" edge="1"> <mxGeometry x="0.006" width="80" relative="1" as="geometry"> <mxPoint x="410" y="1119.98" as="sourcePoint" /> <mxPoint x="570" y="1119.98" as="targetPoint" /> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-37" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;&lt;font style=&quot;border-color: var(--border-color); font-size: 18px;&quot;&gt;andmepäring&lt;/font&gt;&lt;/b&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxGeometry x="411" y="1087" width="160" height="30" as="geometry" /> </mxCell> <mxCell id="s8FXySFB8iG4pd8S0nh0-38" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontStyle=1;fillColor=#999999;" parent="1" vertex="1"> <mxGeometry x="53" y="1200" width="10" height="40" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> Raamatukogude sündmus-, proaktiivse- ja nõusolekuteenuse ärianalüüs Lõpparuanne Tellija: Eesti Rahvusraamatukogu 27.10.2025 Lp Martin Öövel Eesti Rahvusraamatukogu Tõnismägi 2 15189 Tallinn 27. oktoober 2025 Austatud Martin Öövel, Raamatukogude sündmus-, proaktiivse- ja nõusolekuteenuse ärianalüüs Aruanne on koostatud AS PricewaterhouseCoopers Advisors (“PwC”) poolt Eesti Rahvusraamatukogule („Tellija“) vastavalt Tellija ja PwC vahel 11.06.2025 sõlmitud lepingule (“Leping”). Aruande projektis sisalduv info pärineb mitmest aruandes detailsemalt kirjeldatud allikast, sh Tellija poolt jagatud allikatest ja läbi viidud intervjuudest. Me ei ole hinnanud nende infoallikate usaldusväärsust ega testinud sealt pärineva info tõepärasust. Sellest tulenevalt ei anna PwC ühelegi isikule (välja arvatud Tellijale Lepingu alusel) mistahes otseseid ega kaudseid kinnitusi aruande täpsuse või täielikkuse osas. Tegemist on lõpparuandega, mis on koostatud, võttes arvesse teie esitatud kommentaare meie lõpparuande kavandile. Aruande sisu ei ole lubatud teha kättesaadavaks teistele isikutele, välja arvatud Lepingus sätestatud juhtudel ning vastavatel tingimustel. PwC kannab aruandega seoses õiguslikku vastutust Lepingus sätestatud ulatuses üksnes Eesti Rahvusraamatukogu ja mitte ühegi teise osapoole ees, kes võib oma otsustes olla tuginenud selles aruandes sisalduvale teabele või seisukohtadele. Kui Teil on küsimusi seoses lõpparuandega, võtke palun ühendust Tarmo Meresmaa (+372 5819 3443) [email protected]). Lugupidamisega Teet Tender AS PricewaterhouseCoopers Advisors AS PricewaterhouseCoopers Advisors, AS PricewaterhouseCoopers Advisors, Tatari 1, 10116 Tallinn, Registrikood: 10325507, T: 614 1800, [email protected], www.pwc.ee Oluline teadaanne isikutele, kes ei ole aruande adressaadid Isikud, kes ei ole aruande adressaadid ja seda aruannet loevad, loetakse nõustunuks alljärgnevate tingimustega: 1. Aruannet lugev isik võtab teadmiseks, et AS PricewaterhouseCoopers Advisors on selle koostanud vastavalt oma kliendilt saadud juhistele ning üksnes kliendi huvisid ja kasu silmas pidades. 2. Aruannet lugev isik tunnistab asjaolu, et ta pole selle aruande adressaat ning vastamaks tema huvidele ja vajadustele oleks võinud aruande koostamiseks osutuda vajalikuks läbi viia teistsuguseid või täiendavaid töid. 3. Lugeja nõustub, et AS PricewaterhouseCoopers Advisors (sh tema partnerid, volitatud isikud ja töötajad) ja allhankijad ei võta aruandega seoses mingeid kohustusi ega vastutust, ei lepingulist ega lepinguvälist (sh hooletusest ja seadusest tuleneva kohustuse rikkumisest tingitud) vastutust. Lugeja nõustub, et AS PricewaterhouseCoopers Advisors (sh tema partnerid, volitatud isikud ja töötajad) ja allhankijad ei vastuta mistahes kahju, saamata jäänud tulu ega kulutuste eest, mis aruannet lugevale isikule seoses aruande kasutamisega või muul moel aruandega seotult võivad tekkida. 3 Lõpparuanne Sisukord Lühikokkuvõte ........................................................................................................ 5 Executive Summary ................................................................................................ 8 1. Projekti eesmärk, metoodika ja tegevused ......................................................... 11 1.1. Projekti eesmärk ja ulatus ................................................................................................... 11 1.2. Projekti aja- ja tegevuskava................................................................................................. 11 1.3. Projektimeeskond ............................................................................................................... 12 1.4. Töö peamised meetodid ...................................................................................................... 13 2. Hetkeolukorra ülevaade ....................................................................................14 2.1. Raamatukogude võrgustik .................................................................................................. 14 2.2. Eesti Rahvusraamatukogu teenused ................................................................................... 15 2.3. Tänane õigusraamistik ........................................................................................................ 18 2.4. IT-süsteemid ja kasutusel olevad lahendused ................................................................... 20 2.5. Teenuste kasutajad............................................................................................................. 26 3. Tulevikukontseptsioon ..................................................................................... 34 3.1. Tulevikukontseptsiooni alused .......................................................................................... 34 3.2. Raamatukoguteenused sündmusteenuste kontseptsioonis ............................................... 42 3.3. Raamatukoguteenuste võimalikud kasutajateekonnad ..................................................... 44 3.4. Õiguslikud alused ................................................................................................................ 51 3.5. Tuleviku raamatukoguteenuste IT arhitektuuriline visioon .............................................. 58 3.6. Tulevikukontseptsiooni tegevuskava ..................................................................................65 3.7. Tulevikukontseptsiooni teenuste arenduste võimalik maksumus ...................................... 67 Lisad ..................................................................................................................... 68 Lisa 1. Läbiviidud intervjuud ja kohtumised ............................................................................ 68 Lisa 2. RaRa mittefunktsionaalsed nõuded .............................................................................. 69 Lisa 3. RaRa tehnoloogiline profiil ........................................................................................... 69 Lisa 4. Detailne õigusanalüüs ................................................................................................... 69 Lisa 5. RaRa arendustööd ja maksumused ............................................................................... 69 4 Lõpparuanne Lühikokkuvõte Töö eesmärk Käesoleva projekti eesmärgiks oli analüüsida raamatukoguteenuste kasutamisega seotud isikuandmete töötlemise protsesse ja kättesaadavust, lähtudes ühtse üleriigilise raamatukogusüsteemi (ÜÜRS) tulevikuvisioonist. Ühtse üleriigilise raamatukogusüsteemi tulevikuvisioon seab eesmärgiks disainida andmevahetuse ja -töötluse lahendused selliselt, et raamatukoguteenuste kasutamine oleks võimalikult kasutajasõbralik, tõhus ja mugav. Probleemi keskmes on asjaolu, et Eesti Rahvusraamatukogu (RaRa) kontrollib raamatukoguteenuste osutamiseks eriõigusi ja soodustusi ning kogub andmeid käsitsi, kuigi vastavad tõendid ja info (nt puude liik, eestkosteõigus, hariduslik staatus) on juba olemas riiklikes andmekogudes (nt SKAIS2, TÖR, EHIS, Rahvastikuregister ehk RR). Selline käsitlus põhjustab andmete dubleerimist ja koormab kasutajat, kes peab sama infot korduvalt esitama. Lisaks puudub RaRa-s ühtne praktika digiallkirjastatud dokumentide käsitlemisel ning kasutaja autentimise ja registreerimise protsessides, mis tekitab ebamugavusi nii kasutajatele kui ka raamatukogutöötajatele. Analüüs keskendus kolmele peamisele sihtrühmale: • Soodustusega kasutajad – eelkõige nägemispuudega või lugemishäirega isikud, kellel on õigus saada autoriõigusega kaitstud teoseid kasutamiseks ligipääsetaval kujul; • Haridussüsteemi kasutajad – õpilased, õpetajad, õppejõud ja muud haridusasutuste töötajad, kellele on vajalik tagada ligipääs õppematerjalidele ja teadusinfole; • Volitatud kasutaja – alaealised ja piiratud teovõimega isikute nimel tegutsevad eestkostjad või seaduslikud esindajad. Hetkeolukorra ülevaade Eesti raamatukoguvõrk on mitmekesine ja organiseeritud süsteem, mis tagab elanikele vaba juurdepääsu teadmistele, kultuurile ja infoteenustele. 2025. aasta seisuga tegutseb Eestis üle 900 raamatukogu, mis jagunevad nelja põhiliiki: rahvaraamatukogud, kooliraamatukogud, teadus- ja erialaraamatukogud ning Eesti Rahvusraamatukogu (RaRa). Raamatukogu teenuseid kasutas 2024. aastal 701 000 lugejat, kes tegid aastas ligi 12 miljonit laenutust.1 Kasutusel on mitu erinevat raamatukogusüsteemi ja e-kataloogi (RIKS, URRAM, Sierra, RIKSWEB, Lugeja.ee, ESTER), mis tekitab segadust ja killustab andmete haldamist. Näiteks RaRa infosüsteemis Minu Raamatukogu (MIRKO) registreeritud eriõigused ei ole automaatselt nähtavad 1 Postimees, Merilin Piipuu: Mida muudab raamatukogude reform? [Link] 5 Lõpparuanne rahvaraamatukogudes ja vastupidi. Kasutajad soovivad ühtset, mugavat ja läbipaistvat teenust, kus ei pea eraldi süsteemidesse sisse logima ega dokumente dubleerima. Hetkel kontrollitakse soodustusi ja eriõigusi käsitsi, mis tähendab, et kasutaja peab igas raamatukogus esitama tõendid eraldi ning puudub võimalus automaatselt kontrollida eriõiguse aluseks olevate tõendite autentsust ning kehtivust. Tulevikulahendus Tulevikukontseptsioon näeb ette andmevahetuse automatiseerimist ÜÜRS ja riiklike registrite (nt SKAIS2, TÖR, EHIS, RR, TIS) vahel ning raamatukogude vahelist kasutajate andmete edastamist. See vähendab andmete dubleerimist ja kasutajate poolt vajalike toimingute teostamist. Andmevahetuse võimaldamine eeldab kasutajapoolset nõusolekut ja temapoolset võimalust määrata andmete kasutuse ulatust. Süsteemide liidestamine X-tee kaudu võimaldab andmete turvalist ja tõhusat liikumist. Oluline on rakendada andmenõusolekuteenust ja andmejälgijat, mis annavad kasutajale ülevaate tema isikuandmetega seotud toimingutest ja võimaldavad vajadusel anda luba oma andmete edastamiseks ühekordselt või perioodiliselt ning tähtajaliselt või tähtajatult. Tulevikulahendus võimaldab kasutajal olla üleriigiline raamatukogude kasutaja, kus andmed liiguvad turvaliselt ja läbipaistvalt ning eriõigused ja volitused on automaatselt kontrollitavad. Õiguslik alus Isikuandmete töötlemise peamine õiguslik alus on avaliku ülesande täitmine. Kui andmeid ei saa töödelda muul alusel, kasutatakse kasutaja nõusolekut. Soodustusega kasutajate puhul on aluseks autoriõiguse seadus, mis võimaldab ligipääsu kaitstud teostele ilma autori loata. Haridussüsteemi kasutajate puhul kasutatakse EHIS-e ja TÖR-i andmeid nende haridusasutusse kuuluvuse tuvastamiseks, mille õiguslikuks aluseks on avaliku ülesande täitmine raamatukogu seadusjärgsest eesmärgist tulenevalt. Raamatukoguteenuste osutamiseks on vajalik isikusamasuse kontroll ning piiratud teovõimega isikute puhul ka seadusliku esindaja tuvastamine. Alla 18-aastane isik võib teha tehingu seadusliku esindaja nõusolekul või heakskiiduga. Eesti Rahvusraamatukogu seadus annab RaRa-le aluse nii alaealise lugeja kui ka seadusliku esindaja isikuandmete töötlemiseks. RaRa-l puudub hetkel õiguslik alus rahvaraamatukogude ning kooliraamatukogude lugejate andmete töötlemiseks, kuid mais esitatud Rahvaraamatukogude seaduse muudatuse eelnõu sisaldab sätet, mis selle õigusliku aluse looks. Teenuse osutamiseks on vajalik isikusamasuse kontroll ning piiratud teovõimega isikute puhul ka seadusliku esindaja tuvastamine. Alla 18-aastane isik võib teha tehingu seadusliku esindaja nõusolekul või heakskiiduga. Eesti Rahvusraamatukogu seadus annab RaRa-le aluse nii alaealise lugeja kui ka seadusliku esindaja isikuandmete töötlemiseks. Arenduse maksumus ja teekaart Arendustööde kogumahuks on arvestatud hinnanguliselt 6 560 töötundi ning kogumaksumuseks 524 800 eurot, millele lisandub käibemaks. Maksumusest 32% oleks RaRa kanda ning ülejäänud 6 Lõpparuanne investeeringuid peaksid olema valmis tegema teised riigiasutused (nt MTA, SKA, HTM, SIM). Kuna tööd on kavandatud perioodile 2026-2027, siis tuleks arvestada ka hindade kasvuga ja korrigeerida maksumusi tarbijahinnaindeksiga. 7 Lõpparuanne Executive Summary Purpose of the work The objective of this project was to analyse the processes and accessibility of personal data processing related to the use of library services, based on the future vision of a Nationwide Unified Library System. This vision aims to design data exchange and processing solutions that ensure library services are as user-friendly, efficient, and convenient as possible. The core issue is that the National Library of Estonia and other libraries manually verifies special rights and privileges for providing library services, even though the relevant evidence and information (e.g. type of disability, guardianship rights, educational status) already exist in national databases (e.g. Social Protection Information System (SKAIS2), Employment Register (TÖR), Estonian Education Information System (EHIS), Population Register (RR)). This manual approach leads to data duplication and places a burden on users, who must repeatedly submit the same information from library to library. Furthermore, the National Library of Estonia and other libraries lacks a consistent practice for handling digitally signed documents and for user authentication and registration, causing inconvenience for both users and library staff. Focus of the analysis The analysis focused on three main user groups: • Users with special rights – primarily individuals with visual impairments or reading disabilities who are entitled to receive copyrighted works in accessible formats. • Users in the education system – students, teachers, lecturers, and other staff of educational institutions who require access to educational materials and scientific information. • Authorised users – guardians or legal representatives acting on behalf of minors or individuals with limited legal capacity. Overview of the current situation The Estonian library network is a diverse and well-organised system that ensures free access to knowledge, culture, and information services for residents. As of 2025, more than 900 libraries operate in Estonia, divided into four main categories: public libraries, school libraries, research and specialist libraries, and the National Library of Estonia. In 2024, library services were used by 701,000 readers, resulting in nearly 12 million loans annually.2 2 Postimees, Merilin Piipuu: Mida muudab raamatukogude reform? [Link] 8 Lõpparuanne Multiple library systems and e-catalogues are currently in use (RIKS, URRAM, Sierra, RIKSWEB, Lugeja.ee, ESTER), which causes fragmentation and confusion in data management. For example, special rights registered in the National Library of Estonia system Minu Raamatukogu (MIRKO) are not automatically visible in other libraries, and vice versa. Users expect a unified, convenient, and transparent service that does not require logging into separate systems or submitting duplicate documents. Currently, benefits and special rights are verified manually, requiring users to submit proof separately to each library. There is no mechanism to automatically verify the authenticity or validity of the submitted evidence. Future solution The future concept foresees automated data exchange between Nationwide Unified Library System and national registers (e.g. SKAIS2, TÖR, EHIS, Population Register, Health Information System (TIS)), as well as the transfer of user data between libraries. This will reduce data duplication and minimise the need for user intervention. Data exchange requires user consent and the ability to define the scope of data usage. Integration via X-Road (the highway for state data exchange) will ensure secure and efficient data transfer. It is essential to implement a Data consent service3 and a Data tracker4 that provide individuals with a transparent overview of activities involving their personal data. These tools should enable users to grant permission for data sharing either on a one-more time or recurring basis, and for a defined period or indefinitely, depending on their preferences. The envisioned future solution will empower users to act as nationwide library patrons, ensuring data flows securely and transparently across institutions, while special rights and authorizations are automatically validated. Legal basis The primary legal basis for processing personal data is the performance of a public task within the statutory responsibilities of the National Library of Estonia. Where no other legal basis applies, user consent is required. For users eligible for benefits, the basis is the Copyright Act, which permits access to protected works without the author’s permission. For users in the education system, data from EHIS and TÖR is used to verify their affiliation with an educational institution. This processing is also based on the performance of a public task, in line with the statutory objectives of the National Library of Estonia. 3 Republic of Estonia Information System Authority, Data consent service [Page] 4 Republic of Estonia Information System Authorityt. Data tracker [Page] 9 Lõpparuanne To deliver services, identity verification is necessary. In the case of individuals with limited legal capacity, the identification of a legal representative is also required. A person under the age of 18 may enter into a transaction only with the consent or approval of a legal representative. The Estonian National Library Act provides the National Library of Estonia with the legal basis to process the personal data of both minor readers of the National Library and their legal representatives. RaRa currently lacks the legal basis to process reader data from public libraries and school libraries, but the Public Libraries Act amendment bill submitted in May contains a provision that would establish this legal basis. In the context of the Unified National Library System, the National Library may also act on behalf of their libraries and process the personal data of their users. Therefore, the legal basis must also cover such delegated responsibilities. Development cost and roadmap The total estimated volume of development work is 6,560 working hours, with a total cost of €524,800 plus VAT. The National Library of Estonia would cover 32% of the cost, while the remaining investment should be made by other state agencies (e.g. Estonian Tax and Customs Board, Social Insurance Board, Ministry on Education and Research, Ministry of The Interior). As the work is planned for the period 2026–2027, price increases should be considered, and the costs adjusted according to the consumer price index. 10 Lõpparuanne 1. Projekti eesmärk, metoodika ja tegevused 1.1. Projekti eesmärk ja ulatus Käesoleva projekti eesmärgiks oli analüüsida raamatukoguteenuste kasutamisega seotud isikuandmete töötlemise protsesse ja kättesaadavust lähtudes ühtse üleriigilise raamatukogusüsteemi tulevikuvisioonist. Ühtse üleriigilise raamatukogusüsteemi tulevikuvisioon seab eesmärgiks disainida andmevahetuse ja -töötluse lahendused selliselt, et raamatukoguteenuste kasutamine on võimalikult kasutajasõbralik, tõhus ja mugav. Lähtuvalt üldisest eesmärgist oli käesoleva analüüsi rõhuasetus sihtrühma põhiste tulevikukontseptsiooni hõlmavate andmevahetuslahenduste, vajalike eeltegevuste ja koostööpartnerite kaardistamine ning lähtuvalt ärilistest vajadustest raamatukoguteenuste arhitektuurilise lahenduse visiooni koostamine. Peamisteks sihtrühmadeks olid soodustusega (nn lugemishäiring), haridussüsteemi ja volitatud kasutajad ning nendega seonduv andmetöötlus (sh andmevahetus raamatukogude vahel, sündmuspõhised teenused, andmetöötluse läbipaistvus). 1.2. Projekti aja- ja tegevuskava Vastavalt projekti tegevusplaanile teostati analüüs 22 nädala jooksul. Järgnevas tabelis (Tabel 1) on välja toodud projekti sisuetapid ja peamised tegevused lõppeesmärkide saavutamiseks. Projekt jagunes sisulise töö osas neljaks, kus (II-III etapp) esmalt koondati vajalik informatsioon hetkeolukorra ja ootuste kohta, seejärel (III etapp) koostati soovitav tulevikukontseptsioon, mille alusel kaardistati võimalusi teiste andmehaldusega seotud osapooltega ning (IV etapp) seejärel koostati arhitektuuriline lahendus soovitud tulevikukontseptsiooni rakendamiseks koos eeldatava eelarvega. Põhiline eelsisendi kogumine oli analüüsi II etapis, kus toimus olemasoleva teadmuse ja hetkeolukorra kaardistamine, mille raames viidi läbi dokumendianalüüs, andmekorje ja grupiintervjuud RaRa esindajatega. Kogutud teadmine oli vajalik III etapi tulevikukontseptsiooni analüüsiks, sh õigusanalüüsi läbi viimiseks. III etapis keskenduti tulevikukontseptsiooni analüüsile, sh õiguskeskkonna võimaluste ja piirangute tuvastamisele, et piiritleda tänase regulatiivse raamistiku võimalused ja takistused kontseptsiooni rakendamisel. Viidi läbi intervjuud peamiste osapooltega: Maksu- ja Tolliametiga, Haridus- ja Teadusministeeriumiga ja Sotsiaalkindlustusametiga, kes tulevikukontseptsiooni vaatest on olulised partnerid ja osapooled. Lisaks koguti sisendit Siseministeeriumilt ja Sotsiaalministeeriumilt. 11 Lõpparuanne I etapp II etapp III etapp IV etapp V etapp Projekti Hetkeolukorra Tulevikukontseptsiooni Raamatukoguteenuste Lõppraporti käivitamine kaardistus analüüs arhitektuurilise koostamine • Lepingulised • Intervjuud RaRa • Teenuste kirjeldamine lahenduse visioon ja • Raporti läbirääkimised esindajatega sündmusteenuste hinnastamine kavandversiooni • Avakohtumine • Taustamaterjalide kontseptsioonis • IT-arhitektuurilise loomine Tellijale Tellijaga läbitöötamine • Kasutajateekondade visiooni koostamine tagasi- kirjeldamine • Tuleviku- sidestamiseks • Tuleviku- kontseptsiooni • Õigusanalüüs kontseptsiooni • Raporti aluste tulevikukontseptsiooni arenduste lõppversiooni koostamine rakendamisvõimaluste hinnastamine koostamine osas • Intervjuud peamiste sihtrühmade ja seotud osapooltega • Tulevikukontseptsiooni tegevuskava loomine Tabel 1. Projekti etapid ja peamised tegevused IV etapis koostati raamatukoguteenuste arhitektuurilise lahenduse visioon, pandi paika tegevuskava ja hinnastati arenduste eeldatav maksumus. V etapi raames koostati kavandversioon ning esitati tellijale tagasisidestamiseks. Lähtuvalt RaRa tagasisidest koostati raporti lõppversioon. 1.3. Projektimeeskond Projekt viidi ellu Eesti Rahvusraamatukogu (RaRa) tellimusel ja AS PricewaterhouseCoopers Advisors (PwC) eestvedamisel. Töö lähtus RaRa kui Tellija nägemusest ja ühiselt koos PwC-ga otsustatud ja kooskõlastatud tegevustest. Projekti töörühma koosseis on välja toodud Joonis 1. Joonis 1. Projekti töörühma skeem 12 Lõpparuanne 1.4. Töö peamised meetodid Analüüsi läbiviimisel rakendati mitmeid metoodilisi lähenemisi, sealhulgas dokumendianalüüsi, andmekorjet ning selle järgnevat andmeanalüüsi. Lisaks viidi läbi intervjuud kaasatud osapooltega. Andmekorje läbiviimisel lähtuti põhimõttest, et RaRa ja teiste kaasatavate osapoolte käest küsiti andmeid vaid analüüsi läbiviimiseks vajaminevas mahus. Dokumendianalüüs hõlmas varasemate analüüside ja uuringute süstemaatilist läbitöötamist, et saada terviklik ülevaade hetkeolukorrast ning toetada analüüsi teise etapi eesmärkide saavutamist. Projekti hetkeolukorra kaardistamise etapis viidi läbi intervjuud RaRa esindajatega (vt Lisa 1. Läbiviidud intervjuud ja kohtumised), mille eesmärgiks oli saada ülevaade RaRa poolt pakutavatest teenustest ja juurdepääsu süsteemidest, IT-süsteemidest, hetkeolukorra seadusandlusest ja piirangutest ning olemasolevatest materjalidest. III etapis kaasati asutuste esindajad, kellega valideeriti tulevikukontseptsiooni ja koguti osapoolte nägemusi võimalike andmevahetuse lahenduste osas. IV etapis keskenduti raamatukoguteenuste arhitektuurilise lahenduse visiooni koostamisele ja hinnastamisele. V etapis koostati raporti lõppversioon. 13 Lõpparuanne 2. Hetkeolukorra ülevaade 2.1. Raamatukogude võrgustik Eesti raamatukoguvõrk on mitmekesine ja hästi organiseeritud süsteem, mis tagab elanikele vaba juurdepääsu teadmistele, kultuurile ja infoteenustele. Raamatukogud täidavad olulist rolli elukestvas õppes, kogukondade ühendamises ja kultuuripärandi säilitamises. 2025. aasta seisuga tegutseb Eestis üle 900 raamatukogu, mis jagunevad nelja põhiliiki: rahvaraamatukogud, kooliraamatukogud, teadus- ja erialaraamatukogud ja RaRa. Raamatukogu teenuseid kasutas 2024. aastal 701 000 lugejat, kes tegid aastas ligi 12 miljonit laenutust. Kõige rohkem on rahvaraamatukogusid – 2024. aasta seisuga kokku 480, mille pidajaks on kohalikud omavalitsused.5 2.1.1. Rahvaraamatukogud Rahvaraamatukogud on kõige arvukam raamatukogutüüp Eestis. Rahvaraamatukogu järgib Rahvaraamatukogu seadust6 ja Rahvaraamatukogu töökorralduse juhendit7. Rahvaraamatukogud teenindavad laia sihtrühma – lapsi, täiskasvanuid, eakaid – ning pakuvad lisaks raamatute laenutamisele ka mitmesuguseid kogukonnateenuseid: koolitusi, töötubasid, näitusi ja kultuuriüritusi. Rahvaraamatukogude võrgustikku kuuluvad: maakonnaraamatukogud, linna- ja külaraamatukogud ning keskraamatukogud. Kuigi säilituseksemplari seadus seab ülesanded eelkõige Rahvusraamatukogule, toetavad rahvaraamatukogud Eesti kultuurile oluliste väljaannete ja nende algmaterjali kogumist, pikaajalist säilitamist ning kättesaadavust oma tegevuse kaudu. Seadus on kohaldatav trükistele, mida on välja andnud Eesti kodanikud, Eestis registreeritud juriidilised isikud või Eestis viibivad füüsilised isikud. Säilituseksemplariks loovutatakse neli trükist, kaks punktkirjas trükist pimedatele, kaks füüsilisel teabekandjal väljaannet, üks võrguväljaanne ja üks algmaterjal.8 2.1.2. Kooliraamatukogud Kooliraamatukogud toetavad õppeprotsessi ja õpilaste lugemisharjumuste kujundamist. 2023. aasta seisuga tegutseb Eestis 348 kooliraamatukogu. Need on tihedalt seotud koolide õppekavadega ning pakuvad lisaks ilukirjandusele ka õppematerjale, andmebaase ja digiteenuseid. Kooliraamatukogude töö on viimastel aastatel muutunud mitmekesisemaks, hõlmates ka infootsingu õpet ja digipädevuste arendamist.9 5 Postimees, Merilin Piipuu: Mida muudab raamatukogude reform? [Link] 6 Rahvaraamatukogu seadus [Link] 7 Rahvaraamatukogu töökorralduse juhend [Link] 8 Säilituseksemplaride seadus [Link] 9 Kultuuriministeerium. Raamatukogud Eestis [Link] 14 Lõpparuanne Paljud kooliraamatukogud osalevad lugemisprogrammides, näiteks „Lugemisisu“ ja „Raamatukogu kutsub külla“, mis aitavad arendada laste lugemishuvi ja -harjumusi. Raamatukogud teevad tihedat koostööd õpetajatega, toetades ainealast õpet ja pakkudes õppematerjalide komplekteerimist vastavalt õppekavale. Lisaks traditsioonilisele laenutusele pakuvad kooliraamatukogud üha enam ka digikeskkondi, kus õpilased saavad kasutada e-raamatuid, õppemänge ja hariduslikke andmebaase. 2.1.3. Teadus- ja erialaraamatukogud Teadusraamatukogu on avalikku teenust osutav raamatukogu, mille ülesanne on teadusinformatsiooni kogumine, säilitamine, töötlemine ja kättesaadavaks tegemine kõikidele lugejatele. Teadus- ja erialaraamatukogud on Eesti Rahvusraamatukogu, ülikoolide ja teiste kõrgkoolide raamatukogud ning mitmesuguste asutuste erialaraamatukogud. Teadusraamatukogude tegevust koordineerib Haridus- ja Teadusministeerium, erandiks on Rahvusraamatukogu, mille tegevust koordineerib Kultuuriministeerium, kuigi seda käsitletakse samuti teadusraamatukoguna. Erialaraamatukogud tegutsevad enamasti asutuste raamatukogudena.10 2.2. Eesti Rahvusraamatukogu teenused RaRa on avalik-õiguslik juriidiline isik, kes tegutseb Eesti Rahvusraamatukogu seaduse ja põhikirja ning teiste õigusaktide alusel kooskõlas raamatukogutööd reguleerivate rahvusvaheliste normide ja põhimõtetega. RaRa täidab lisaks rahvusbibliograafia koostamise, parlamendiraamatukogu ja raamatukogunduse arenduskeskuse funktsioone.11 RaRa ülesanne on rahvuslike kultuuriväärtuste ja infovarade kogumine, säilitamine ja kättesaadavaks tegemine ning teadus- ja arendustegevus ning sellele tuginevate infoteenuste osutamine ühiskonnale. Ühtlasi pakub RaRa kasutajatele mitmesuguseid lisateenuseid. 2.2.1. Raamatute ja teavikute laenutus Raamatuid ja teavikuid on võimalik laenutada kasutajatel RaRa raamatukogus kohapeal, posti teel, telefoni kui ka e-posti teel. Laenutamiseks on vajalik registreeruda kasutajaks, mis toimub läbi e- kataloogi ester.ee, RaRa veebilehe kaudu või raamatukogus kohapeal.12 Laenutamise protsess näeb ette, et lugeja valib teaviku (kui seda pole kohe saadaval, siis lisab võimalusel laenutusjärjekorda), registreerib laenutuse kas iseseisvalt raamatukogusüsteemis iseteenindusena või raamatukogutöötaja abiga ning võtab laenutatud teaviku endaga kaasa või tellib selle kättesaamise raamatukapist või postipakiautomaadist. Vajadusel ja võimalusel pikendab jooksvalt tagastustähtaega ja 10 Kultuuriministeerium. Raamatukogud Eestis [Link] 11 RaRa veebileht [Link] 12 RaRa, raamatukogu kasutajaks registreerimine [Link] 15 Lõpparuanne tagastab teaviku hiljemalt tähtajal.13 Pimedate raamatukogu tegutseb vastavalt Rahvusraamatukogu seadusele, mille §4 lõike 4 alusel on Eesti Rahvusraamatukogu ülesandeks muu hulgas ka pimedate raamatukogu teenuse pakkumine.14 See tähendab, et raamatukogu teenindab nägemispuudega või mõne muu trükitud teksti lugemist takistava puude, häire või haigusega inimesi. Raamatukogu valmistab, kogub, säilitab ja laenutab heli- ja punktkirjas teavikuid, puuteraamatuid, e-raamatuid ja kirjeldustõlkega filme. Pimedate raamatukogu teenindab lugejaid Eestis ja välismaal. Teavikuid on võimalik laenata raamatukogus kohapeal, Tondi laenutuspunktis, posti teel kui ka läbi veebikeskkonna Veebiraamatukogu.15 Lugeja, kellel ei ole võimalik laenutust ise teostada, saab teavikuid laenata ja tagastada kontaktisiku vahendusel. Lugejad saavad tellida lisaks mittetagastatavaid heli- ja e-raamatuid ja heliajalehti ja ajakirju CD-plaadil. Nendele raamatutele saavad kasutajad esitada tellimust kord 2 nädala jooksul, korraga 5 raamatut. Vastavalt lugeja tellimusele tehakse heliraamatust või e-raamatust CD-le koopia ja saadetakse lugejale posti teel koju. Heliajalehed ja -ajakirjad ning e-ajalehed ja e- ajakirjad on kättesaadavad Veebiraamatukogu vahendusel. Veebiraamatukogus on võimalik kasutajal teavikuid alla laadida ja voogedastusena kasutada, lisada teavikuid raamaturiiulisse, tellida uute raamatute teavitusi ja näha oma varasemaid allalaadimisi ja kuulamisi. 2.2.2. Raamatute tellimine koju, pakiautomaati või lähimasse raamatukokku Minu Raamatukogu teenus MIRKO on RaRa hallatav üleriigiline laenutusteenus, mis võimaldab kõigil Eesti elanikel otsida ja laenutada raamatuid ning muid väljaandeid erinevate Eesti raamatukogude kogudest ühelt veebiplatvormilt – mirko.ee. Teenus on loodud selleks, et muuta raamatute kättesaamine lihtsamaks ja mugavamaks, sõltumata kasutaja või raamatukogu asukohast.16 MIRKO kaudu saab kasutaja tellida paberraamatuid teenusega liitunud raamatukogudest, pakiautomaati, kulleriga koju või järeletulemise võimalust pakkuvasse raamatukokku ning lugeda või kuulata e-raamatuid ja audioraamatuid veebibrauseris või mobiilirakenduses. Rakendus on saadaval nii Androidile kui iOS-ile ning võimaldab lugemist ka ilma internetiühenduseta. MIRKO teenus koondab raamatukogude kogud ühte virtuaalriiulisse, pakkudes ligipääsu ligi kahele miljonile teosele. RaRa haldab MIRKO teenust igapäevaselt, pakkudes kasutajatuge nii lugejatele kui ka raamatukogudele. Raamatukogud saavad teenusega tasuta liituda, soovitada seda oma kasutajatele ning osaleda koolitustel ja arendustegevustes. MIRKO aitab muuta raamatukoguteenuse kättesaadavamaks, mitmekesisemaks ja kasutajasõbralikumaks üle kogu Eesti. 13 EY (2022) Raamatukoguteenuste ärianalüüs ja teenusedisain [Link] 14 Eesti Rahvusraamatukogu seadus [Link] 15 Veebiraamatukogu [Link] 16 Minu Raamatukogu [Link] 16 Lõpparuanne 2.2.3. Digitaalarhiiv DIGAR DIGAR on RaRa digitaalne platvorm, mis teeb kultuuripärandi kättesaadavaks laiemale avalikkusele. See toimib kui kaasaegne digitaalne raamatukogu, kus saab uurida vanu raamatuid, ajalehti, fotosid ja tulevikus ka 3D-mudeleid. DIGAR võimaldab luua interaktiivseid näitusi, õppematerjale ja mänge, mis muudavad kultuuripärandi elavaks ja kaasavaks. Platvorm toetab raamatukogusid, pakkudes neile vajalikku IT-taristut, ekspertide tuge ja juhendamist. Rahvusvaheline IIIF17 (International Image Interoperability Framework) protokoll, mis rakendub lähitulevikus, suurendab kogude nähtavust ja jagatavust, soodustades koostööd nii Eesti kui ka rahvusvaheliste partneritega. DIGAR aitab muuta keerulise lihtsaks ja toetab kultuuripärandi säilitamist ning populariseerimist. DIGAR on pidevas arengus, pakkudes uusi võimalusi digikogude rikastamiseks ja kasutajate kaasamiseks. Iga päev tegeletakse platvormi arendamise, tehnilise uuendamise ja koostööprojektide loomisega, et teenus vastaks raamatukoguvõrgu ootustele ja vajadustele.18 2.2.4. Andmebaasid ja teadusinfo Litsentsiandmebaaside otsing pakub registreeritud kasutajatele veebipõhist ligipääsu teadusinfo täistekstidele, õppematerjalidele, populaarteaduslikele artiklitele, ajakirjandusele, statistilistele andmetele ja multimeediaressurssidele, mis pärinevad enam kui kolmekümnest litsentsitud andmebaasist ning üle viiesajast vabakasutuses teadusmaterjale sisaldavast allikast. Sisaldab ligipääsu rahvusvahelistele teadusandmebaasidele nii litsentsitud kui ka vabakasutuses allikatele.19 Keskkond võimaldab mugavat ja keskset juurdepääsu võõrkeelsetele teadusressurssidele ühelt platvormilt. RaRa litsentsiandmebaase saab kasutada läbi otsinguportaali ja selle kasutamist tutvustatakse kutsekoolitustel ning soovi korral pakutakse koolitusi ka raamatukoguvõrgule. 2.2.5. Õppimis- ja uurimisvõimalused RaRa pakub mitmekesiseid võimalusi õppimiseks ja uurimistööks. Külastajatele on avatud mugavad lugemissaalid ja tööruumid, mis sobivad nii individuaalseks süvenemiseks kui ka rühmatööks. Lisaks toimuvad regulaarselt seminarid ja õppeprogrammid, mis toetavad teadmiste omandamist ja arendavad info- ning meediapädevust. 17 Võimeka IT-taristu ja IIFI protokolli abil saavad raamatukogud luua digitaalseid lahendusi, mis köidavad nii kohalikke elanikke kui ka külastajaid. Digaris kasutatav rahvusvaheline IIIFI protokoll võimaldab raamatukogude digikogusid kergemini leida ning neid on lihtsam uurida, jagada ja rikastada. Kogude taas- ja ristkasutus tagab nende elujõulisuse. IIFI protokoll [Link] 18 RaRa koduleht, DIGAR [Link] 19 RaRa litsentsiandmebaas [Link] 17 Lõpparuanne 2.2.6. Konsultatsioonid ja koolitused RaRa pakub raamatukogutöötajatele ja teistele huvilistele professionaalseid seminare ja koolitusi, mis toetavad erialast arengut ja teadmiste täiendamist. Koolitused hõlmavad teemasid alates infootsingust ja teadustööst kuni autoriõiguse ja tehisintellekti kasutamiseni. Koolitused on tasuta ning toimuvad nii kohapeal kui ka veebis.20 2.2.7. Kultuuri- ja haridussündmused Raamatukogu korraldab mitmekesiseid kultuuri- ja haridussündmusi, sealhulgas näitusi, loenguid, perehommikuid, mänguõhtuid. Need sündmused aitavad tuua kultuuripärandi inimestele lähemale ning toetavad elukestvat õpet. Erilist tähelepanu pööratakse meediapädevuse ja kriitilise mõtlemise arendamisele läbi konverentside ja arutelude. 2.3. Tänane õigusraamistik RaRa on Eesti Rahvusraamatukogu seadusega loodud avalik-õiguslik juriidiline isik. RaRa lähtub avalik- õigusliku juriidilise isikuna oma põhikirjast.21 RaRa seadusjärgsed ülesanded hõlmavad teavikute kogumist, säilitamist ja kättesaadavaks tegemist, nende registreerimist rahvusbibliograafia andmebaasis ning andmebaasi kättesaadavaks tegemist. Samuti koordineerib RaRa rahvusbibliograafia alast koostööd, kogub ja esitab trükitoodangu – ja raamatukogualaseid riiklikke statistilisi andmeid, tegutseb rahvusliku agentuurina standardnumbri rahvusvahelises süsteemis ning osaleb rahvusvahelises koostöös. Lisaks neile ülesannetele toimib rahvusraamatukogu ka parlamendi-, humanitaar- ja sotsiaalteaduste raamatukogu ning teadus- ja arendusasutusena.22 Täiendavalt on RaRa ülesandeks hoiuraamatukogu funktsiooni täitmine ehk üleriigiline vähekasutavate trükiste hoiukogu haldamine, sh talletades ja kättesaadavaks tehes Eesti raamatukogudest saadud säilitamist väärivat kirjandust, ning vahendades vahetuskogusse saadud väljaandeid raamatukogudele ja teistele asutustele kogude täiendamiseks või hävinenud väljaannete asendamiseks. Ühtlasi on erivajadusega kasutajatest lähtuvalt RaRa ülesandeks pimedatele, vaegnägijatele või muu trükikirjalugemise puudega isikutele ligipääsetavas vormis väljaannete valmistamine, komplekteerimine, säilitamine ja kättesaadavaks tegemine.(ibid) Rahvaraamatukogude tegevust Eestis reguleerib rahvaraamatukogu seadus, mis määratleb rahvaraamatukogude tegevuse, kogude, teeninduse, juhtimise ja finantseerimise korralduse alused. Rahvaraamatukogud pakuvad mitmeid põhiteenuseid, sealhulgas teavikute kohapealset kasutamist, koju 20 RaRa koduleht, seminarid ja koolitused [Link] 21 RaRa põhikiri [Link] 22 Eesti Rahvusraamatukogu seadus [Link] 18 Lõpparuanne laenutamist ning ligipääsu avalikule teabele arvutite ja andmesidevõrgu vahendusel. Täiendavalt korraldavad nad koduteenindust tervisliku seisundi tõttu raamatukokku külastada mittesaavatele elanikele. Kasutajatel on seaduse järgi õigus nende teenuste kasutamiseks.23 Rahvaraamatukogude rahastusallikateks on kohaliku omavalitsuse eelarved, riigieelarve, annetused, tasulised teenused ning sihtasutuste ja sihtkapitalide laekumised. Kuigi põhiteenused on tasuta, on tasulised eriteenused nagu kopeerimine, tõlkimine ja andmebaaside kasutamine, mille tasud kinnitab valla- või linnavalitsus. Raamatukogude vahelise laenutuse kaudu saab nõudmisel tellida puuduvat teost kasutaja kulul. Elektroonilised teenused hõlmavad avalikku e-kataloogi, raamatukogu veebilehte ja elektrooniliste teavikute kogu, kus seansid, virtuaalkülastused ning alla laaditud teavikud ja kirjed on jälgitavad. (ibid) Kultuuriministeeriumis valmistatakse ette rahvaraamatukogu seaduse muutmist, mis toob kaasa uusi koostöövorme raamatukoguvõrgu ja teenuste arendamiseks, eesmärgiga muuta raamatukoguteenused kaasaegsemaks ja paremini lugeja vajadustega vastavaks. Plaanitakse reguleerida rahvaraamatukogude infovara üldkättesaadavaks tegemise infotehnoloogia arengut ja haldamist, et tagada teenuste kaasaegsus, ligipääsetavus ja kasutajasõbralikkus. Sh käsitleda rahvaraamatukogude muutunud rolli infoühiskonnas ja kirjeldada tingimused teenuste nüüdisajastamiseks. Seaduseelnõuga on rahvaraamatukogudele ette nähtud kohustus ühineda ühtse üleriigilise raamatukogusüsteemiga (ÜÜRS).24 Rahvaraamatukogu töökorralduse juhend sätestab juhised rahvaraamatukogudele kogude komplekteerimiseks, teavikute hankimiseks, vastuvõtmiseks, arvestuseks, kustutamiseks, inventuuriks, töötlemiseks ja kataloogimiseks, samuti raamatukogu kasutamiseks, mis hõlmab lugejate registreerimist ja arvestust, kojulaenutust, kohalkasutust, külastust ning teatme- ja teabeteenindust.25 Teadusraamatukogude tegevust reguleerivad avalik-õiguslike ülikoolide seadused26 ning teadus- ja arendustegevuse korralduse seadus. Seejuures teadusraamatukogude teenused on õigusakti tasandil määratlemata.27 Kooliraamatukogude tegevust reguleerib põhikooli- ja gümnaasiumiseadus, mille kohaselt peab koolil olema raamatukogu, mille põhiülesanne on toetada kooli õppekava järgset õpet trükiste, audiovisuaalsete ja muude infokandjate säilitamise ja kättesaadavaks tegemise kaudu. Samuti peab raamatukogu toetama õpilaste iseseisva õpitöö ja teabe hankimise oskust ning lugemishuvi. Raamatukogu kogud jagunevad põhikoguks ja õppekirjanduse koguks. Rahvaraamatukogu võib täita kooliraamatukogu põhiülesannet 23 Rahvaraamatukogu seadus [Link] 24 Rahvaraamatukogu seaduse muutmine [Link] 25 Rahvaraamatukogu töökorralduse juhend [Link] 26 Tartu Ülikool, Tallinna Ülikool, Tallinna Tehnikaülikool, Eesti Maaülikool, Eesti Kunstiakadeemia, Eesti Muusika- ja Teatriakadeemia. 27 Teadus- ja arendustegevuse ning innovatsiooni korralduse seadus [Link] 19 Lõpparuanne põhikogu osas, kui see asub kooliga samas hoones või koolile piisavalt lähedal, et kooliraamatukogu põhiülesande täitmine ei oleks takistatud. Sellisel juhul peab kooliraamatukogus olema vähemalt õppekirjanduse kogud.28 Kooliraamatukogude töökorralduse alused kehtestab valdkonna eest vastutav minister. Kooli teenindavad raamatukogud jagunevad kooliraamatukogudeks-õpikeskusteks ja õpperaamatukogudeks. Õpperaamatukogud pakuvad materjale, mis on vajalikud õppetööks, samas kui kooliraamatukogud- õpikeskused toetavad üldarendavate materjalidega õpilaste iseseisvat arengut. Kooliraamatukogu teenindab kooli õpilasi, pedagooge ja töötajaid, pakkudes teenuseid vähemalt 6 tundi ühe töötaja puhul ja vähemalt 8 tundi mitme töötaja korral koolipäeva jooksul. Raamatukogus registreeritakse lugejaid, laenutusi ja külastusi vanuserühmade järgi: täiskasvanud (pedagoogid, töötajad ja 10.–12. klassi õpilased) ning lapsed (1.–9. klassi õpilased). Õpilased registreeritakse lugejaks õpilaspileti või klassinimekirjade alusel, pedagoogid ja töötajad isikut tõendava dokumendiga. Õppekirjanduse kogu kujundamisel lähtutakse Eesti Hariduse Infosüsteemi õppekirjanduse alamregistrist ning tellimused kooskõlastatakse klassi- ja aineõpetajate ettepanekutel kooli direktoriga.2930 Kohaliku omavalitsuse korralduse seadus määrab, et omavalitsusüksus vastutab valla või linna koolieelsete lasteasutuste, põhikoolide, gümnaasiumide, huvikoolide, raamatukogude, rahvamajade ja teiste kohalike asutuste ülalpidamise eest, kui need kuuluvad omavalitsusüksuse omandusse. Kuna ÜÜRS ja raamatukogude vaheline laenutus hõlmab kõigi Eesti raamatukogude poolt kasutatavat tehnoloogilist lahendust (st igapäevases kasutuses raamatukogusüsteemid, e-kataloogid ja integratsioonid teiste süsteemidega), siis kasutajatele suunatud lahenduste vaatest on oluline ka kohaliku omavalitsuse seisukoht.31 Kohalikud omavalitsused on vabad otsustama, milliseid süsteeme kasutatakse ja riik ei saa nõuda teatud süsteemide eelistamist. Nõuded süsteemide kasutamisele peaksid tulema RaRa intervjueeritud esindajate hinnangul Kultuuriministeeriumist. 2.4. IT-süsteemid ja kasutusel olevad lahendused Eesti raamatukogud toetavad oma teenuseid kolme peamise raamatukogusüsteemi kaudu, igaühe juurde kuulub erinev e-kataloog. Raamatukogusüsteemidest populaarseim on Raamatukogude Info- ja Kataloogisüsteem (RIKS) 32, mida kasutab 523 raamatukogu. Järgneb URRAM33, mida kasutab 329 28 Põhikooli- ja gümnaasiumiseadus [Link] 29 Kooliraamatukogude töökorralduse alused [Link] 30 EY (2022) Raamatukoguteenuste ärianalüüs ja teenusedisain [Link] 31 Kohaliku omavalitsuse korralduse seadus [Link] 32 Raamatukogude Info- ja Kataloogisüsteem [Link] 33 Urram veebikeskkond [Link] 20 Lõpparuanne raamatukogu, ning süsteem Sierra, mida kasutab umbes 100 raamatukogu.34 Kasutusel on kolm erinevat e-kataloogi: ESTER, Lugeja.ee, RIKSWEB. E-kataloogi süsteemile ESTER vastab raamatukogusüsteem Sierra, Lugeja.ee süsteemile URRAM ja RIKSWEB süsteemile vastavalt RIKS. E-kataloogidest on hetkel kasutajatel enim kokkupuudet ESTER kataloogiga35, mis töötab raamatukogusüsteemil Sierra. Sierrat, mida arendab Ameerika Ühendriikide ettevõte Clarivate|Innovative Interfaces36, kasutab umbes 100 raamatukogu Eestis. E-kataloog ESTER on Eesti suuremate raamatukogude ühiskataloog.37 Seda haldab MTÜ Eesti Raamatukoguvõrgu Konsortsium (ELNET Konsortsium), kuhu kuuluvad Eesti Kunstiakadeemia, Eesti Maaülikool, Eesti Muusika- ja Teatriakadeemia, Eesti Rahvusraamatukogu, Tallinna linn, Tallinna Tehnikaülikool, Tallinna Ülikool, Tartu linn ja Tartu Ülikool.38 ELNET Konsortsium tegutseb raamatukogude avalike huvide ühiseks teostamiseks, luues töögruppe ja koordineerides ühisprojekte infosüsteemide ja -teenuste arendamiseks. Konsortsium arendab ja haldab raamatukogusüsteemi Sierra, e-kataloogi ESTER, Eesti artiklite andmebaasi ISE, Eesti märksõnastikku EMS ja Eesti E-varamu portaali. Samuti esitatakse ettepanekuid ja taotlusi toetuste saamiseks nende süsteemide haldamiseks ja arendamiseks. Konsortsiumi eelarve koosneb liikmemaksudest, teenustasudest ja toetustest, sh Haridus- ja Teadusministeeriumi aastasest riigieelarvelisest toetusest ESTER-i ja ISE hoolduseks ja arenduseks. Liikmemaks sisaldab üldisi halduskulusid, liikme osaluse alusel arvutatud kulusid ja täiendavat varalist kohustust.39 RIKS-i haldab ja arendab Deltmar OÜ, kes on süsteemi loomisel arvestanud erinevate raamatukogutüüpidega, st süsteemi funktsionaalsused vastavad enamiku raamatukogutüüpide vajadustele, välja arvatud teadus- ja erialaraamatukogude spetsiifilised vajadused, mida katab Sierra. Lugejatele on loodud e-kataloog RIKSWEB. RIKS-i kasutas 2025. aasta seisuga 534 raamatukogu, sealhulgas 1 eraraamatukogu, 32 erialaraamatukogu, 284 kooliraamatukogu, 4 lasteaeda ja 213 rahvaraamatukogu.40 Tarkvara on modulaarne ja täielikult seadistatav, võimaldades juurde osta lisafunktsioone, nagu näiteks RFID abil inventuuri teostamine. Süsteemi põhiteenused hõlmavad teavikute komplekteerimist, 34 EY (2022) Raamatukoguteenuste ärianalüüs ja teenusedisain [Link] 35 Rethink ja EY (2022) Raamatukogu kliendiuuringu kokkuvõte [Link] 36 Sierra koduleht [Link] 37 E-kataloog ESTER [Link] 38 Eesti Raamatukoguvõrgu Konsortsium [Link] 39 EY (2022) Raamatukoguteenuste ärianalüüs ja teenusedisain [Link] 40 Raamatukogu Info- ja Kataloogisüsteem RIKS [Link] 21 Lõpparuanne kataloogimist ja väljalaenutamist. Raamatukogutöötajatel on lisaks võimalus hallata kasutajaid ja raamatukogu inventari ning koostada statistikat. 41 RIKS-i arhitektuuriline ülesehitus on esitatud Joonis 2, kus on toodud süsteemi põhikomponendid nagu klientrakendus, e-kataloog RIKSWEB, autentimislahendused, bibliograafilased andmebaasid ning iseteenindusvõimalused, sh pakiautomaadid ja RFID-toega kioskid. Joonis 2. RIKSi üldine arhitektuur 1. RIKS – RIKS-i infrastruktuuri keskne komponent. 2. RIKS klientrakendus – raamatukogutöötaja töökohaarvutisse paigaldatud kasutajaliides RIKS-i raamatukogutöötajale mõeldud funktsionaalsuste kasutamiseks. 3. RIKSWEB – RIKS-i e-kataloog, raamatukogu kasutajale mõeldud veebipõhine kasutajaliides. 4. Autentimislahendus – võimaldab autentimist kasutajatunnuse ja salasõna, AD (Active Directory), ID-kaardi, Facebooki, Google-i või Microsofti kontoga, olemas on ka TARA tugi. 5. Rahvusbibliograafia – keskne bibliokirjete andmebaas, mis on osa Sierra raamatukogusüsteemist. 41 EY (2022) Raamatukoguteenuste ärianalüüs ja teenusedisain [Link] 22 Lõpparuanne 6. Bibliograafia andmebaasid – lisaks Rahvusbibliograafiale võimaldab RIKS üle liidese kirjeid kopeerida mitmetest bibliokirjete andmebaasidest (nt USA-st ja Venemaalt). 7. Pakiautomaat – eraldiseisev seade, kust kasutajal on võimalik eeltellitud raamat sobival ajal kontaktivabalt kätte saada. 8. Pakiautomaadi iseteeninduskeskkond – pakiautomaadi kaudu teostatavate laenutuste haldamine raamatukogu töötaja poolt 9. Iseteeninduskiosk – RIKS iseteeninduskioskite tugi koos RIKS-iga liidestatud iseteeninduskeskkonna tarkvaraga koos RFID kasutamise võimalusega. 10. Eesti Üldine Märksõnastik (EMS) – RIKS-is saab üle liidese kasutada Eesti Üldises Märksõnastikus loodud märksõnu. 11. ERP – raamatukoguteenuste pakkumisel osaleb hetkel ühe olulisema taustsüsteemina ka raamatupidamissüsteem, mis hetkel RIKS-iga liidestatud pole. Raamatukogusüsteemi URRAM kasutab 2025. aasta jaanuarikuu seisuga kokku 313 raamatukogu üle Eesti, sealhulgas 9 keskraamatukogu, 252 rahvaraamatukogu ja 14 erialaraamatukogu.42 URRAM-i arendust koordineerib Rahvusraamatukogu ning süsteemi tehnilist haldust ja arendust teostab Urania COM OÜ. Nende peamine tegevusvaldkond on koostöös Kultuuriministeeriumiga raamatukogutarkvara URRAM arendamine ja klienditoe pakkumine rahvaraamatukogudele. URRAM pakub vajalikke funktsioone, nagu teavikute komplekteerimine, kataloogimine ja laenutamine, samuti kasutajate haldamist, teadete ja e-kirjade saatmist ning statistika koostamist. Süsteemi teenused on kohandatud peamiselt rahva- ja kooliraamatukogude vajadustele, pakkudes näiteks kooliraamatukogudele klassinimekirjade haldamist ja laenutustähtaegade fikseerimist.43 URRAM-i arhitektuuriline ülesehitus on esitatud Joonis 3, kus on välja toodud süsteemi keskne komponent, klientrakendus, e-kataloog Lugeja.ee, koduloolise infosüsteem Kodulugu.ee, bibliograafilised andmebaasid ning pakiautomaadid ja ERP liidestamise võimalused. 42 Urramit kasutatavad raamatukogud [Link] 43 EY (2022) Raamatukoguteenuste ärianalüüs ja teenusedisain [Link] 23 Lõpparuanne Joonis 3. URRAMi üldine arhitektuur 1. URRAM – URRAM-i infrastruktuuri keskne komponent. 2. URRAM klientrakendus – raamatukogutöötaja töökohaarvutisse paigaldatud kasutajaliides URRAM-i raamatukogutöötajale mõeldud funktsionaalsuste kasutamiseks. 3. Lugeja.ee – URRAM-i e-kataloog, raamatukogu kasutajale mõeldud veebipõhine kasutajaliides. 4. Kodulugu.ee - Eesti rahvaraamatukogude ühine koduloolise info talletamise süsteem, raamatukogu kasutajale mõeldud veebipõhine kasutajaliides. 5. Rahvusbibliograafia – keskne bibliokirjete andmebaas, mis on osa Sierra raamatukogusüsteemist. 6. Pakiautomaat – eraldiseisev seade, kust kasutajal on võimalik eeltellitud raamat sobival ajal kontaktivabalt kätte saada. 7. Pakiautomaadi iseteeninduskeskkond – pakiautomaadi kaudu teostatavate laenutuste haldamine raamatukogu töötaja poolt. 8. ERP – raamatukoguteenuste pakkumisel osaleb täna ühe olulisema taustsüsteemina ka raamatupidamissüsteem, mis täna URRAM-iga liidestatud pole. 24 Lõpparuanne Minu Raamatukogu (MIRKO) on üleriigiline platvormteenus, mis võimaldab laenutada väljaandeid raamatukogudest üle Eesti ja laenutada Eestis ilmunud e-väljaandeid.44 Üle-eestiline raamatulaenutus võimaldab tasuta laenutada raamatuid teenusega liitunud raamatukogudest, tasudes vaid raamatu kättetoimetamise eest kulleriga või soovitud pakiautomaati. Samuti on kasutajal võimalik tellimustele ise tasuta järgi minna ja neid tasuta tagastada nendes raamatukogudes, kus see funktsioon on eraldi lubatud – see tähendab, et teenusega liitunud raamatukogud peavad selle võimaluse eraldi aktiveerima. MIRKO koos DIGAR-iga ning tulevase ühtse üleriigilise raamatukogusüsteemiga (ÜÜRS) moodustab üleriigilise raamatukoguteenuste võrgustiku. MIRKO on hetkel integreeritud raamatukogusüsteemidega URRAM, RIKS ja Sierra teatud bibliograafiliste andmete osas, kuid tulevikus on suund, et MIRKO kujuneb ühtseks e-kataloogiks, mis ühendab kõik süsteemid terviklikuks kasutajakogemuseks. MIRKO kaudu on peatselt kättesaadavad ka Eesti Rahvusraamatukogu Pimedate raamatukogu e-väljaanded erivajadustega kasutajatele. Tänaseks on MIRKO-ga liitunud 87 raamatukogu üle Eesti ja selle teenuse kasutamine on rahvaraamatukogudele tasuta– teenust finantseerib Kultuuriministeerium.45 MIRKO kaudu laenutamine toimub füüsiliste raamatute puhul selliselt, et kui kasutaja soovib laenutada teaviku mõnest raamatukogust, tehakse tellimus MIRKO keskkonnas ning RaRa vahendab laenutuse vastavast raamatukogust. Raamatukogu, kust füüsiline raamat pärineb, ei suhtle kasutajaga otse ega salvesta tema andmeid oma süsteemis. MIRKO-l endal ei ole füüsilisi raamatuid – see toimib vaid tellimiskeskkonnana. MIRKO kasutaja on üleriigiline kasutaja ning laenutuse haldamise ja vastutuse osas tegutseb RaRa. Näiteks raamatu kadumise või kahjustamise korral tekib nõue laenutanud raamatukogu infosüsteemis RaRa vastu, kuid MIRKO vahendusel suunatakse nõue laenutajale. Laekunud viivised või kahjutasud vahendab RaRa lugeja ja kahju kannatanud raamatukogu vahel – lugeja tasub nõude MIRKO-s ehk (RaRa-le) ning MIRKO edastab tasu vastavalt raamatukogule. Välja arvatud e-raamatu laenutamisel MIRKO e-laenutuse platvormil, kus laenutus toimub otse MIRKO süsteemis ning MIRKO tegutseb ise raamatukoguna. MIRKO teenus võimaldab kasutajal tellida teise raamatukogu valduses oleva raamatu endale sobivasse asukohta – kas mõnda raamatukokku, postiautomaati või kulleriga postiaadressile. Sellisel juhul edastab RaRa kliendi poolt juba antud kontaktinformatsiooni teistele osapooltele, nt kullerile, postiautomaadi operaatorile või sellele raamatukogule, kuhu raamat telliti. Andmeedastuses kolmandale osapoolele ei ole kasutusel andmejälgija komponenti, mistõttu ei ole isikul võimalik enda andmete kasutust jälgida (kuidas informatsioon liigub). Selleks, et andmejälgijat rakendada, on tarvilik luua vastavad lahendused X-tee teenusega. 44 Minu Raamatukogu kasutustingimused [Link] 45 Minu Raamatukogu veebileht [Link] 25 Lõpparuanne MIRKO on üles ehitatud nii, et dokumendihaldus toimib juurdepääsulahenduse kaudu uue kasutaja registreerimisel, kasutaja andmete muutmisel ning vastava seadistuse olemasolul ka kasutaja teenusest loobumisel. MIRKO ise dokumendihaldussüsteemiga ei suhtle. Juurdepääsulahendus ehk SSO on eraldi süsteem, mis lubab RaRa hallatavatel süsteemidel kasutajaid autentida, registreerida ja vajadusel eriõiguse andmist registreerida. SSO kaudu saab lisada alaealisele laenutamiseõigust, kustutada oma kasutajakontot ning anda eri- ja laenutusõigusi. Eriõigust taotleval isikul on teenusele registreerimisel või oma andmete muutmisel RaRa juurdepääsusüsteemis (SSO) võimalik lisada taotluse aluseks olevad dokumendid. Taotlused ja lisatud dokumendid kuvatakse RaRa volitatud töötajale kinnitamiseks või tagasilükkamiseks. Info, mida kuvatakse on isiku nimi, isikukood, taotlemise aeg ja vajalikud dokumendid. Töötaja teeb otsuse taotluse kohta, kinnitamisel märgib, kas eriõigus on tähtajaline või tähtajatu. Pärast otsuse tegemist kustutatakse esitatud dokumendid juurdepääsulahenduse keskkonnast. Kasutajakirjesse märgitakse, kas isikul on eriõigus ja õiguse kehtivuse aeg (kuupäev või märge tähtajatu õiguse kohta). Juurdepääsulahenduses, mida MIRKO kasutab isikute registreerimiseks ja eriõiguste haldamiseks, on logides salvestatud sündmused, mis sisaldavad eriõiguse taotlemist, õiguse andmist või taotluse tagasilükkamist. Isikuandmed on logides anonümiseeritud. RaRa juurdepääsusüsteem on liidestatud RaRa dokumendihaldussüsteemiga, kuhu salvestatakse kasutaja registreerimisega, lapsevanema nõusoleku andmisega, andmete muutmisega ning teenusest loobumisega soetud dokumendid. 2.5. Teenuste kasutajad Raamatukoguteenused on suunatud kõigile kasutajatele ning laenutuste ja raamatukoguteenuste kasutajate arv on suur. Peamise kasutajate sihtrühma moodustavad (kõige aktiivsemad kasutajad) täisealised naisterahvad (tarbivad teenuseid iseenda või lähedase jaoks), seeniorid ja kooliealised lapsed. Raamatukoguteenuste vaatest on oluline tavakasutajatele mõeldud teenuste kasutajamugavuse tõstmine, sest erinevad e-kataloogid, e-keskkonnad ja teenuste kasutamine tekitavad kõigile kasutajatele segadust.46 Tavakasutaja vaatest on oluline raamatukoguteenuste kasutamise lihtsustamine ja mugavus, mis ühtlasi kehtib ka käesoleva analüüsi fookuses olevatele sihtrühmadele. Peatükk keskendub käesoleva analüüsi raames sihtrühmadele (Joonis 4), kes kasutavad RaRa raamatukoguteenuseid eritingimustel, st erivajadustega isikud, õpilased ja õpetajad ning eestkostja või volitatud esindaja kaudu teenuseid saavad isikud. 46 EY, Rethink (2022). Raamatukogu kliendiuuringu kokkuvõte. [Link] 26 Lõpparuanne Joonis 4. Sihtrühmad Selles peatükis kirjeldatakse iga sihtrühma lõikes, kuidas praegune süsteem toimib ning millised on peamised probleemid ja väljakutsed. Raamatukogu 2022. aasta kliendiuuringus osalenud leidsid, et liiga palju on eraldiseisvaid süsteeme (erinevad e-kataloogid ja andmebaasid). Kasutusel olevate e-kataloogide ja andmebaaside paljusus tekitavad kasutajates segadust. Kasutajad soovivad saada kõik teenused ühest kohast, ilma et nad peaksid tegelema tehniliste detailidega või erinevaid süsteeme märkama. Seejuures on raamatukogude esindajad rõhutanud ühtsesse keskkonda info koondamise ja tegevuste konsolideerimise olulisust. Näiteks lugejaks registreerimine toimuks ühe korra, muutes inimese automaatselt kõigi raamatukogude lugejaks, ning et andmeid hallataks tsentraalselt (nt äpid, SAIS, ÕIS, e-kool/stuudium jne). Hetkel ei ole kõik raamatukogud liitunud ühtsesse süsteemi. Kasutusel on üleriigilise kasutaja konto (MIRKO) ja raamatukogu kasutaja konto, mis omavahel liidestatud ei ole. Näiteks MIRKO-s kasutaja registreerimisel eriõiguste kohta informatsioon ei ole automaatselt kättesaadav rahvaraamatukogus ja vastupidi.47 Kõikide kasutajate andmeid hoitakse RaRa ja MIRKO teenustes 3 aastat, välja arvatud veebiraamatukogu.ee kasutajad, kelle andmeid täna ei kustutata. Kasutajate andmete osas on ette nähtud, et iga aasta peab kasutaja oma andmeid uuendama. Kui kasutaja logib mingisse süsteemi sisse, siis nõutakse kasutajalt sisselogimisel oma andmete ülevaatust, eraldi teadet kasutajale ei saadeta. Juhul kui 3 aasta jooksul kasutaja ei ole andmeid uuendanud, siis saadetakse kasutajale 1 kuu enne kasutajaprofiili kustutamist teavitus, et teenuste viimasest kasutamisest on möödunud kolm aastat. Kui teenuste tingimused või isikuandmete töötlemise kord muutuvad ning kasutaja ei nõustu uuendatud tingimustega keskkonda sisselogimisel, siis kasutaja profiil säilitatakse kuni 3 aastat. Pärast selle perioodi möödumist teeb haldur profiili kustutamiseks vastavad toimingud. Kasutaja andmeid kontrollitakse rahvastikuregistrist alaealise ja eestkostja suhte kontrollimiseks, aga ka juhul, kui on tekkinud võlgnevus ja see antakse üle sissenõudjale. Kui selgub, et kasutaja on surnud, siis kantakse tekkinud võlgnevus ja kahju kuludesse, kui võlgniku lähedaste poolt võlgnevust ei likvideerita. Eraldi 47 EY, Rethink (2022). Raamatukogu kliendiuuringu kokkuvõte. [Link] 27 Lõpparuanne teavitust RaRa isiku surma kohta rahvastikuregistrist hetkel ei saa ehk kasutajad kustutatakse kas juhtumipõhise kontrolli tulemusena või kasutaja mitteaktiivsuse tõttu. 2.5.1. Soodustusega kasutaja Soodustatud isikutel, näiteks lugemishäirega isikutel, on Autoriõiguse seadusest tulenevalt õigus saada autoriõigusega kaitstud teostele tasuta ligipääs neile sobivas ligipääsetavas vormis koopiana, mis on valmistatud spetsiaalselt nende vajadusi arvestades ja mille tegemiseks ei ole vaja autori eelnevat nõusolekut. Teenus on suunatud eelkõige nägemispuudega ja lugemisraskustega kasutajatele. Seda teenust on seni pakkunud Pimedate Raamatukogu, peamiselt e-teenusena veebikeskkond.ee portaalis. Lisaks e- teenusele pakutakse ka füüsilist laenutust, näiteks helisalvestisi ning elektroonilisi teavikuid (nt e-raamatud), mis liidetakse edaspidi E- kataloogiga. Osapoolte selgituste kohaselt on lugemishäirega lugejate osakaal kasvamas tänu laiemale teavitustegevusele ja üleüldisele nõudlusele audioraamatute järele. Hetkel on teenuse kasutajaid eri vanuses ja erineval tasemel infotehnoloogiliste võimekustega, samuti elab osa kasutajaid välismaal (omavad Eesti isikukoodi ja dokumente). Veebiraamatukogu kasutajaks saavad registreeruda Pimedate Raamatukogu lugejad, st nägemispuudega või mõne muu trükitud teksti lugemist takistava puude, häire või haigusega inimesed. Hetkel on paralleelselt võimalik kasutajaks registreerimine läbi viia Veebiraamatukogus ja MIRKO keskkonnas. See tähendab, et kasutajal võib olla ainult Pimedate Raamatukogu konto või MIRKO konto. Ühtlasi ei kandu üle eriõigused RaRa süsteemist teistesse raamatukogudesse ehk kasutaja peab oma eriõigust igas raamatukogus eraldi tõendama. RaRa tulevikuvisioon kasutajamugavuse vaatest näeb ette liikumist ühe kasutajakonto suunas juhul kui andmekaitse regulatsioonid seda võimaldavad. Vastavalt raamatukogu kodulehel esitatud selgitustele võib soodustatud isikuna registreeruda juhul, kui isikul on nägemispuue või trükitud teksti lugemist takistav puue, häire või haigus. RaRa hinnangul on selline sõnastus uutele kasutajatele piisavaks juhiseks soodustatud staatuse taotlemisel. Samas ei ole kehtivas seadusandlus täpselt määratletud, millised sihtrühmad sellele õigusele konkreetselt kvalifitseeruvad, mistõttu võib tõlgendamisel esineda erinevusi. Kuna konkreetsed sihtrühmad ei ole seadusandluses välja toodud, ei ole väga täpselt RaRa/Pimedate Raamatukogu sihtrühmi soodustuse saamiseks piiritlenud. Tõendit võib kasutaja seejuures esitada registreerimisel e-keskkonnas, saata e-kanali kaudu või esitada paberil raamatukogutöötajale. Praktikas loetakse sihtrühma sobivaks näiteks ka aktiivsushäirega kasutajad, kui vastav tõend on esitatud ja raamatukogutöötaja hinnangul asjakohane. Kuna teenuse kasutaja nõuded ei ole üheselt selged, siis taotlevad teenusele ligipääsu ka isikud, kellel ei ole tegelikult õigust eriõigustele ja seeläbi suurendavad koormust taotluste menetlemisel. Selle üheks põhjuseks on asjakohase ja arusaadava nõuete loetelu puudumine, mille alusel on võimalik eriõiguse taotlejal saada kinnitust, kas ta kuulub soodustatud isikute sihtrühma või mitte. Koormus taotluste menetlemisel on samas RaRa töötajatel, kes peavad iga taotluse individuaalselt läbi vaatama ja hindama, 28 Lõpparuanne sh vajadusel täpsustama kasutajate poolt esitatud andmeid. Tõendi hindamine sõltub RaRa esindajate sõnul dokumentide korrektsusest (tihti esitatakse dokumente mitmes osas) ja esitatava tõendi sobivusest – sisuliselt on raamatukogu töötaja ekspertarsti rollis selleks vajalikku ettevalmistust omamata, et hinnata erivajadust lugemishäiringu kontekstis. Samuti ei ole detailselt kirjeldatud tingimusi esitatava tõendi osas, millest kasutaja soodustuse taotlemisel lähtuma peab. E-kataloogis võib tõendina üles laadida maksimaalselt 5 faili (PDF, Word, JPG), aga nende sisu osas piiranguid ei ole. See tähendab, et kasutaja võib esitada puudega isiku kaardi, pensionitunnistuse, Sotsiaalkindlustusameti puude määramise otsuse, või muu tõendi, mis on määratletud muu seaduse, rahvusvahelise lepingu või Euroopa Liidu õigusaktiga.48 Praktikas on olukordi, kus tõend ei sisalda informatsiooni puude või häiringu kestuse kohta. Sellisel juhul märgitakse kasutajale eriõigus tähtajatult. Samuti, kui on raamatukogutöötaja poolt hinnatav, et kasutaja lugemishäiring ei muutu (nt nägemine ei saa taastuda), siis märgitake eriõigus tähtajatult. Täna puudub ka võimalus teostada järelkontrolli, kas kasutaja staatus on vahepeal muutunud (nt eriõiguse alus lõppeb tähtajast varem või on muutunud muul põhjusel). Oluline on märkida, et tõendi esitamine ja eriõiguse saamine ei eelda Sotsiaalkindlustusameti poolt puude tuvastamist ja määramist49 ehk puue ei ole kasutaja eriõiguse saamise ainus alus. Kui soodustatud isikud kasutavad autoriõigustega kaitstud teavikuid ja materjale, siis see mõjutab vahetult autoritasusid, sest soodustatud isikutel on õigus tasuta kasutada teoseid ja nende kasutuskorrad ei too autoritele laenutamisest saadavat tulu.50 2.5.2. Haridussüsteemi kasutaja Kooli- ja teadusraamatukogudes registreeritakse õpilased sageli automaatselt lugejateks kooli astumisel, kusjuures kooliraamatukogus ei ole alaealistele lugejaks registreerimiseks vaja vanema nõusolekut. See tuleneb asjaolust, et kooliraamatukogu on osa haridusasutuse igapäevasest õppetöö korraldusest ning selle kasutamine toetab õpekava täitmist. Seetõttu ei käsitleta lugejaks registreerimist eraldiseisva teenusena, mis eeldaks lepingulist suhet või riskantset isikuandmete töötlemist. Õpilase isikuandmete töötlemine kooliraamatukogus toimub kooli avaliku ülesande täitmise raames ning on seaduslik ilma vanema eraldi nõusolekuta. 51 48 Eesti Rahvusraamatukogu seadus [Link] 49 Sotsiaalkindlustusamet [Link] 50 Autoriõiguse seadus [Link] 51 Riigi Teataja. Kooliraamatukogude töökorralduse alused [Link] 29 Lõpparuanne Teatud juhtudel täidab kohalik rahvaraamatukogu ka kooliraamatukogu rolli ehk kirjandusele ligipääs on ainult seal ning kooliraamatukogudes on ainult õpikute kogu. Teistes raamatukogudes nõutakse aga alaealise registreerimisel vanema kinnitust ja nõusolekut. Teadusraamatukogudes registreeritakse üliõpilasi lugejateks üldjuhul Riigi Infosüsteemi Ameti autentimisteenuse (TARA) või veebivormi kaudu või raamatukogus kohapeal. Välisüliõpilaste puhul võivad isikukoodid esialgu raamatukogusüsteemis puududa, kui Eesti isikukoodi ei ole veel väljastatud. Teadusraamatukogudes kasutatavale e-kataloogi süsteemile ESTER vastav raamatukogusüsteem Sierra kasutab e-kataloogis kasutaja registreerimisel ja sisselogimisel KRAS (Elneti poolt hallatav süsteem juurdepääsulahendustele) süsteemi, mis on liidestatud TAAT52 süsteemiga. Kuna TAAT süsteemis ei ole aga kasutaja kirje juures isikukoodi, ei ole võimalik selle kaudu registreerida teenusele neid üliõpilasi, kellel puudub Eesti isikukood. Seega puudutab see piirang eelkõige välisõpilasi, kellel ei ole veel Eesti isikukoodi väljastatud. TARA liidestuse kaudu saavad registreeruda need kasutajad, kellel on Eesti isikukood olemas. Kooliraamatukogudes kasutatakse üldiselt raamatukogusüsteemi RIKS, mis on integreeritud Stuudiumi, eKooli, Siseveebi ja Minu Kool süsteemidega. Stuudiumi ja Siseveebiga liidestus võimaldab otse RIKS-ist õpilaste andmeid importida ja registreerida. Minu Kooliga integratsioon võimaldab importida ka õpilaste fotosid. Tänu Stuudiumi ja eKooli liidestusele saavad õpilased jälgida oma laenutusi ja tähtaegu otse vastavates õppeinfosüsteemides.53 Eesti Hariduse Infosüsteemis on kasutusel HarID54, mis võimaldab ühe kasutajaga sisse logida mitmesse rakendusse ning luua kasutajakonto alaealisele, kellel ei ole ID-kaarti ehk autentimise võimalust. HarID on seotud isikukoodiga, mis on eestkostja poolt märgitud. See tähendab, et kasutaja on identifitseeritud, aga kahetasandiline autentimine ei ole võimalik – HarID kasutab kasutajanime ja parooli. Eesti hariduse infosüsteemi (EHIS), mida haldab Haridus- ja teadusministeerium, registreeritakse täna koolide, õpilaste, pedagoogide ja õppejõudude andmed. EHIS ei hõlma aga töötajaid, kelle ametikoha koormus on väiksem kui 3 ainepunkti, ega ka neid töötajaid, kes ei ole seotud otseselt õppetööga – näiteks tugipersonal, haldustöötajad või muud administratiivsed ametikohad. Sellistel juhtudel peavad ülikoolid ja teised õppeasutused või kasutajad ise vajalikud andmed raamatukogule esitama. Samuti ei ole täna võimalik MIRKO kaudu pärida andmeid töötajate registrist selle kohta, kas isik töötab konkreetses õppeasutuses.55 Juhul kui koolid pakuvad MIRKO e-laenutuse moodulis õppematerjale oma 52 Eesti haridus- ja teadusasutuste vahelise autentimise ja autoriseerimise taristu [Link] 53 EY (2022) Raamatukoguteenuste ärianalüüs ja teenusedisain [Link] 54 HarID [Link] 55 Töötajate register [Link] 30 Lõpparuanne õpilastele, siis kontrollitakse nende teavikute laenutamise hetkel EHIS-sest, kas õpilasel on õigus antud materjalidele. Välisriigist õppima asuvad tudengid saavad ülikooli kaudu kasutajakonto, kuid sellel hetkel võib neil puududa isikut tõendav Eesti dokument, millega tekib isikukood. Sama olukord võib esineda ka välisriigist õpetama saabunud õppejõudude või õpetajate puhul. See tähendab, et eesti isikukoodi olemasolul e-kataloogi kasutajaks registreerides peab inimene looma uue kasutaja, kui ta ei ole eelnevalt raamatukogus kohapeal oma isikukoodi olemasoleva kasutajaga sidunud. Sellisel juhul võib tekkida olukord, kus välisriigi kasutajal on kaks kasutajakirjet – üks nimeline ja teine isikukoodi põhine. 2.5.3. Volitatud kasutaja Volitatud kasutaja all on mõeldud kasutajaid, kes osade raamatukoguteenuste kasutamisel (nt laenutusteenus) vajavad eestkostja nõusolekut (kasutajad, keda esindatakse). Samuti peetakse volitatud kasutaja all silmas isikut, kes on volitatud tegema toiminguid raamatukoguteenuste kasutaja nimel (hetkel vastav teenus MIRKO-s puudub, aga osades rahvaraamatukogudes on see kasutusel). MIRKO kasutajaks saavad registreeruda Eesti isikukoodi omavad inimesed alates 13. eluaastast. Alla 13- aastase peab kasutajaks registreerima tema seaduslik esindaja ehk lapsevanem või eestkostja. Selleks, et raamatukogust laenutamise teenust kasutada, peab alla 18-aastane kasutaja saama oma eeskostjalt nõusoleku, mis vormistatakse digitaalselt ja mis kehtib kuni kasutaja 18-aastaseks saamiseni. Seejuures alla 18-aastase isiku tekitatud kahju hüvitab tema eestkostja.56 Alaealise kasutaja seos tema eestkostjaga kontrollitakse üle Rahvastikuregistrist.57 Lähtuvalt süsteemi tänasest ülesehitusest kontrollitakse eestkostja olemasolu kasutaja registreerimisel. Kui eestkostja on muutunud või lapsevanema ja lapse vaheline suhe on muutunud, siis selle kohta informatsioon kasutajate andmebaasi ja MIRKO süsteemi ei jõua. Kuna eestkostja või lapsevanema andmeid pärast kasutaja loomist ei kontrollita, siis ei pruugi esitatud kasutajaandmed vastata hiljem tegelikkusele. Kui kasutaja registreeritakse raamatukogus kohapeal, siis praktikas ei küsita alati eraldi volitust kasutajaks registreerimisel. Näiteks kui alla 13-aastane ennast kasutajaks registreerib, siis kirje võidakse raamatukogutöötaja poolt luua ilma vastavat volitust küsimata. Ühtlasi erineb raamatukoguti praktika, millisel viisil volitusi säilitatakse ja kas säilitatakse. Volituste kasutamine ja määramine raamatukoguteenuse osas on veel arendamisel – MIRKO-s ei ole täna volituse teenust. Hetkel kui isik ennast kasutajaks registreerib, siis pole osapoolte hinnangul võimalik kontrollida, kas tegelikult on isikul õigus võtta varalist vastutust. Praktikas on esinenud juhtumeid, kus laenutusteenust kasutas isik teise kasutaja eest, kuigi tal puudus selleks tegelik õigus. Kuna tegemist on riskiga, mis hõlmab varalise kahju tekkimist, peetakse oluliseks selle olukorra 56 Minu Raamatukogu (MIRKO) kasutustingimused 57 Minu Raamatukogu (MIRKO) isikuandmete töötlemise kord 31 Lõpparuanne lahendamist. RaRa-s ei ole hetkel kasutusel andmebaasi päringuid eestkostjate kohta (va alaealised), mistõttu puudub info, kas eestkostja on määratud või kas eestkostja on muutunud. Eestkostja määramise praktikast lähtuvalt asub eestkostja enda ülesandeid täitma alates kohtumääruse kätte saamisest. Seejuures kohus edastab kohtumääruse rahvastikuregistrisse ja rahvastikuregistrist nähtub eestkostja määramise järel eestkoste seadmise ulatus ning kes on eestkostjaks määratud.58 Mh Rahvastikuregistri seaduse § 21 lg 1 näeb ette, et rahvastikuregistrisse kantavad isikuandmed on ka eestkoste andmed ning ametiasutustel on õigus pärida andmeid eestkoste kohta.59 2.5.4. Kokkuvõte Järgnevalt on välja toodud erikasutajate lõikes peamised sihtrühmad, nõuded kasutaja loomiseks ja hetkeolukorda kirjeldavad asjaolud. Tegemist on 2.4 peatüki kokkuvõtva osaga, mille alusel on koostatud tulevikukontseptsiooni alused (sisend andmevahetuse skoobile ja ulatusele, sh vajadusele). Järgmises tabelis on kirjeldatud kasutajad, kasutaja segmendid ja kasutaja loomise alused ehk millise informatsiooni alusel kasutaja luuakse. Kasutaja Kasutaja segment Kasutaja loomise alus Soodustusega kasutaja • Nägemispuudega • Puudega isiku kaart • Nägemiskahjustusega vaegnägija • Pensionitunnistus • Taju- või lugemispuudega • Sotsiaalkindlustusameti tõend • Võimetu raamatut • Arstitõend puude liigi ja kestvusega hoidma/käsitsema/silmi lugemiseks • Muu seaduse, rahvusvahelise lepingu või vajalikul määral fookustama või EL-i õigusest lähtuv tõend liigutama Haridussüsteemi kasutaja • Õpilane Minu Raamatukogu (MIRKO): • Õppejõud • Isikut tõendav dokument (autentimine) • Õpetaja • Kooliraamatukogu: • Koolitöötaja – Õpilaspilet • Tudeng – Õppeklassi nimekiri • Teadusraamatukogu (ülikoolid): – Isikut tõendav dokument Volitatud kasutaja • Eestkostja • Rahvastikuregistri päring • Seaduslik esindaja (lapsevanem) • Lapsevanema/eestkostja volitus • Volitatud isik • Muu isiku esitatud volikiri Tabel 2. Kasutajad ja kasutaja loomise alused Tabel 3 Tabel 2kirjeldab kasutajate haldamisega seonduvat hetkeolukorda ja soovitud lahendusi andmete vahetuseks ning kasutajateekonna sujuvamaks muutmisele. Mh ei ole täna kasutusel andmenõusoleku teenust, mis võimaldaks regulaarselt teostada andmepäringuid registritest. 58 Eestkostja teejuht [Link] 59 Rahvastikuregistri seadus [Link] 32 Lõpparuanne Kasutaja Hetkeolukord Soovitud lahendused Soodustusega kasutaja • Õigust peab kasutaja ise tõendama • Puude tõendi päring SKA-st igas raamatukogus • Päring terviseandmetest • Ühtne vorm tõenditele puudub • Andmete edastamine raamatukoguvõrku • Raamatukogutöötaja kontrollib iga • Ülevaade isikuandmetega sooritatud tõendit ja otsustab toimingutest • Ei ole selgelt reguleeritud, kes on õigustatud isik • Tõend ei oma alati kehtivuse lõppu • Kasutajakontosid ei suleta va kui kasutaja ise pöördub Haridussüsteemi kasutaja • EHIS andmebaasi päringut kasutaja • EHIS päring õppejõu, õpetaja, õpilase või registreerimisel ei teostata, päring tudengi osas teostatakse väljaande laenutamisel • Töötajate registrist päring haridusasutuses • EHIS-ses puudub alla 3AP töötamise kohta koormusega õpetaja/õppejõud ja • Andmete edastamine raamatukoguvõrkku õppetööga mitteseotud töötajad • Ülevaade isikuandmetega sooritatud • Töösuhet tuleb kontrollida ülikooliga toimingutest kontakteerudes • Välismaalane registreeritakse ülikoolis ilma isikukoodita, e-kataloogis kasutaja tegemisel võib tekkida kaks kasutajat • HarID kasutajakonto on ainult parooli põhine • Õppematerjalid võivad olla kooli spetsiifilised (EHIS päring MIRKO-s) Volitatud kasutaja • Volitada MIRKO ei võimalda, üldjuhul • Rahvastikuregistri päring on teistes raamatukogudes kasutusel • Volitamise võimaldamine kirjalikud volitused (st ühtne praktika • Andmete edastamine raamatukoguvõrkku puudub) • Ülevaade isikuandmetega sooritatud • Volitatud isiku esindusõiguse toimingutest lõppemise info puudub • Eestkostja määramise kohta info puudub • Lapsevanema ja lapse vahelist suhet ei kontrollita periooditi • Rahvaraamatukogudes võib alla 13- aastane luua ilma volituseta ja lapsevanema nõusolekuta laenutuse korral ei saa varalist kahju välja nõuda • Ainult võlgnevuse korral kontrollitakse rahvastikuregistrist isiku andmeid Üldine • Kasutaja andmete liikumist ei ole • Rahvastikuregistri päring võimalik jälgida • Andmejälgija teenuse rakendamine • Üleriigiline kasutaja ja raamatukogu • Nõusolekuteenuse rakendamine kasutaja ei ole omavahel ühendatav • Ainult võlgnevuse korral kontrollitakse käsitsi rahvastikuregistrist isiku elusolekut ja andmeid • Personaalseid pakkumisi tellida ei saa • Kasutajatingimustega mittenõustumise korral 3 aasta möödumisel kasutaja konto kustutakse • Iga-aastaselt on nõutav kasutajakonto uuendamine Tabel 3. Kasutajate haldamise hetkeolukord ja soovitud lahendused 33 Lõpparuanne 3. Tulevikukontseptsioon Järgmises peatükis antakse ülevaade tulevikukontseptsiooni alustest, raamatukoguteenustest sündmusteenuste lõikes ja raamatukogu võimalikest kasutajateekondadest. Tulevikukontseptsiooni peatükk hõlmab endast ka õiguslikke aluseid, IT arhitektuurilist visiooni ja tegevuskava ning teenuste arenduse võimalikku maksumust. 3.1. Tulevikukontseptsiooni alused Peamine eesmärk on tulevikukontseptsioonist lähtuvalt automatiseerida andmevahetust MIRKO (tuleviku ÜÜRS-i E-kataloog) ja registrite vahel ning võimaldada raamatukogude vahelist kasutajate andmete edastamist. Selline lahendus vähendab andmete dubleerimist ning vähendab oluliselt kasutajate koormust seoses vajalike toimingute teostamisega. Kavandatav süsteem toetab ka ühekordse andmeesitamise põhimõtet (once-only principle), mille kohaselt ei pea kodanikud ja ettevõtted esitama sama teavet riigiasutustele korduvalt. See põhimõte on sätestatud Avaliku teabe seaduses (§ 43¹)60 ning on kooskõlas Euroopa Liidu digitaalse ühtse värava määrusega (EL) 2018/172461, mis nõuab liikmesriikidelt piiriülese andmevahetuse võimaldamist ja proaktiivsete teenuste arendamist. Lisaks kehtestab Vabariigi Valitsuse 25.05.2017 määrus nr 8862 teenuste korraldamise ja teabehalduse nõuded, sh sündmusteenuste ja proaktiivsete teenuste rakendamise põhimõtteid. Selleks, et andmevahetus toimuks automaatselt ja kasutajatele läbipaistvalt on oluline rakendada andmenõusolekuteenust63 ja andmejälgijat64, mis annab kasutajale ülevaate tema isikuandmetega seotud toimingutest. Andmevahetuse võimaldamine eeldab kasutajapoolset nõusolekut ja temapoolset võimalust määrata andmete kasutuse ulatust, sh anda luba ühekordselt või perioodiliselt ning tähtajaliselt või tähtajatult. Lisaks eeldab andmenõusolekuteenuse kasutamine kasutaja õigust oma andmete töötlemise volitus igal hetkel peatada. Üleriigilise kasutaja osas on RaRa vaatest oluline, et laenutusteenuse kasutamisel tekib kasutajal võimalus saada konkreetse raamatukogu kasutajaks, see tähendab, et vastutus laenutuse osas tekib isikule konkreetse raamatukogu ees, kust kasutaja raamatu laenutab. Samuti tekiks võimalus, et MIRKO- s registreerimisel saaks kasutaja anda nõusoleku oma andmete edastamiseks teistele raamatukogudele, mille tulemusel saaks ta olla nö kõigi või valitud raamatukogude kasutaja. 60 Riigi Teataja. Avaliku teabe seadus [Link] 61 Euroopa Liidu määrus (EL) 2018/1724 [Link] 62 Riigi Teataja. Teenuste korraldamise ja teabehalduse alused [Link] 63 Andmenõusoleku teenuse kirjeldus [Link] 64 Andmejälgija [Link] 34 Lõpparuanne Käesolev tulevikukontseptsioon lähtub kolmest peamisest kasutajagrupist (st soodustusega kasutaja, haridussüsteemi kasutaja ja volitatud kasutaja) ja näeb ette, et nende kasutajagruppide lõikes on MIRKO-le võimaldatud ligipääs kasutajatega soetud informatsioonile neid iseloomustavate tunnuste identifitseerimiseks. Järgnevas tabelis (Tabel 4) on kirjeldatud kasutajagruppide lõikes neid kirjeldavad tunnused ja ärivajadused nende tunnuste olemasolu kontrollimiseks teistest riigi andmekogudest. Kasutajagrupp Tunnus Ärinõuded Soodustusega kasutaja Määratud on puue SKAIS2-s 1. Kasutaja registreerimisel või kasutaja poolt oma andmete või väljastatud tervisetõend muutmisel tehakse andmepäring. Tervise Infosüsteemist 2. Kontrollitakse SKAIS2-is määratud puude liiki ja selle kehtivust. 3. Kontrollitakse tervisetõendi olemasolu Tervise Infosüsteemis. Tervisetõend peab olema väljastatud standardiseeritud kujul lugeja eriõiguse taotlemise eesmärgil. 4. Iga-aastasel kasutaja andmete uuendamisel küsitakse nõusolekut korduspäringute teostamiseks. Haridussüsteemi Kantud EHIS-sesse või 1. Kasutaja registreerimisel ja laenutamisteenuse kasutamisel kasutaja märgitud haridusasutuse tehakse andmepäring. töötajaks TÖR-is 2. Kontrollitakse EHIS-sest kasutaja olemasolu, õppeasutust, õppeklassi või kursust. 3. Kontrollitakse TÖR-is töösuhte olemasolu õppeasutusega, st töökoha aadress ja töösuhte kehtivut. Kui tööandjaks on KOV (nt vallavalitsus), saab kooli tuvastada töökoha aadressi põhjal, võrreldes seda EHIS-es registreeritud kooli aadressiga. 4. Iga-aastasel kasutaja andmete uuendamisel küsitakse nõusolekut korduspäringute teostamiseks. Volitatud kasutaja Märgitud on eestkostja või 1. Kasutaja registreerimisel tehakse andmepäring. lapsevanem/esindaja RR-s 2. Kontrollitakse RR-s, kas kasutajal on kehtiv eestkoste- või esindusõigus ning kas isik, kes on märgitud eestkostjaks või esindajaks, omab tegelikult vastavat õigust seoses konkreetse kasutajaga. 3. Regulaarset kontrolli (nt igal teenuse kasutamisel või autentimisel) ei rakendata – volituse kehtivust hinnatakse üksnes registreerimisel. Tulevikus võiks kaaluda automaatse korduskontrolli rakendamist, et tagada volituse kehtivus kogu teenusekasutuse vältel. Tabel 4. Päringute teostamine kasutajatunnuste identifitseerimiseks. Päringute teostamise eelduseks on andmevahetuse olemasolu andmekogudega, kus vastav informatsioon kasutajate kohta on olemas. Selleks kaardistati võimalikud andmekogud ja valideeriti nende asjakohasust ja sobivust andmeallikatena. Järgnevalt on välja toodud andmekogude kaardistuse tulem (vt Tabel 5), mis käsitleb potentsiaalseid andmekogusid, kus on kasutajate tunnuste tuvastamiseks asjakohane andmestik olemas. Mh analüüsiti e-õppeinfosüsteemide andmekogude asjakohasust, aga tulenevalt rahvaraamatukogude andmete hoiustamise killustatusest, otsustati nende raamatukogude andmekogusid detailsemalt mitte vaadelda. Asutus Andmekogu Kogutavad andmed analüüsi seisukohast Maksu- ja Tolliamet Töötamise register • Isikukood • Ees- ja perekonnanimi • Sünniaeg (kui isikukood puudub) • Töötamise alustamise kuupäev • Töötamise liik • Tööaja määr • Töötaja ametinimetus • Töökoha aadress 35 Lõpparuanne Asutus Andmekogu Kogutavad andmed analüüsi seisukohast Haridus- ja Eesti haridus- ja • Isikukood või sünniaeg Teadusministeerium õppeinfosüsteem (sh HarID) • Ees- ja perekonnanimi • Töökohaks oleva õppe- või teadusasutuse registreerimiskood ja nimi • Ametikoht või ametikohad (akadeemiline töötaja) • Töötamise algus töökohaks olevas õppeasutuses • Akadeemilise töötajana töötamise alus (lepingu liik), algus ja lõpp ning ametikoha koormus (…) • Töölepingu kestus • Töötamise lõpp (kuupäev lahkumisel) • Elukohamaa • Välisüliõpilane • Rahvastikuregistri järgne kohaliku omavalitsuse üksus • Rahvastikuregistri järgne aadress või sideaadress • Õppeasutusse õppima asumine või immatrikuleerimine (kood) ja õppeasutusse õppima asumise või immatrikuleerimise kuupäev • Õpingutega seotud andmed (nt klass, kursus jne) Sotsiaalkindlustusamet Sotsiaalkaitse Infosüsteem • Eesnimi • Perekonnanimi • Isikukood/sünniaeg • Puude määramise otsus, sh puude liik, puude raskusaste, funktsiooni kõrvalekalle, diagnoos jm • Puude määramise otsuse kehtivus Tervise ja Heaolu Tervise infosüsteem • Isikukood või muu ID Infosüsteemide Keskus • Isikut tõendava dokumendi number • Isikut tõendava dokumendi liik • Ees- ja perekonnanimi • Sünniaeg • Diagnoos Siseministeeriumi Rahvastikuregister • Eestkostja andmed infotehnoloogia- ja • Lapse esindaja andmed arenduskeskus Ülikoolid Õppeinfosüsteem Andmete koosseis on samalaadne võrrelduna Eesti haridus- ja õppeinfosüsteemiga. Käesolevas analüüsis detailsemalt õppeinfosüsteeme ei vaadeldud. Tabel 5. Andmekogud ja kogutavad andmed Alljärgnevalt on esitatud andmekogude detailsem ülevaade, sealhulgas andmete struktuur, kasutuspraktikad ning tuleviku liidestusvõimalused ja arendusvajadused. Ülevaade põhineb Riigi Infosüsteemi Haldussüsteemi andmetel ning asutustega läbiviidud intervjuude sisendil. 3.1.1. Töötamise register (TÖR) Töötamise registri andmete struktuur ja kasutuspraktikad Töötamise register on töötamisega seotud infot koondav register, mida peab Maksu- ja Tolliamet. Töötamise registris registreeritakse töötamise alus/liik, ametinimetus, tööaja määr, töökoha asukoht (aadress), töötamise peatamine, riigikaitselise ametikoha (RKA) märge, tööle asumise ja töö lõpetamise aeg, tööd võimaldav isik, tööd tegev isik ja elutähtsa teenuse osutaja taustakontrollile allutatud isiku (TKA) märge.65 65 Riigi Infosüsteemi haldussüsteem, Töötamise register (TÖR) [Link] 36 Lõpparuanne Andmete täpsus ja ajakohasus sõltub tööandja sisestamise praktikast ning kehtivatest reeglitest. Kuigi tööandja võib olla üldisemalt märgitud (nt kohaliku omavalitsuse üksus), peab töökoha asukoht olema registreeritud reaalse töökoha aadressina, näiteks konkreetse haridusasutuse aadressina. See nõue tuleneb TÖR-i struktuurist, kus asukoht viitab füüsilisele töö tegemise kohale, mitte tööandaja juriidilisele aadressile. Andmete usaldusväärsus sõltub sisestamise täpsusest ja kontrollmehhanismide olemasolust, mis haridusvaldkonnas võivad olla paremini rakendatud, kui mujal. Töötamise registri kontaktisikuga intervjuud läbi viies selgus, et andmete sisestamise järelkontrolli TÖR-is ei teostata, st andmete õigsuse eest vastutab täielikult andmete sisestaja. Tuleviku liidestusvõimalused ja arendusvajadused Maksu- ja Tolliameti sõnul TÖR-i andmete liidestamine teiste teenustega eeldab selget õiguslikku alust, mis on hetkel eelnõuna menetlemisel. Liidestuse ajakava sõltub andmevajaduse täpsest määratlemisest ja rahastusest, kuid Maksu- ja Tolliamet ei näe võimalust enne 2027. aastat antud arendustööd ette võtta eelkõige lähtuvalt sellest, et arendustööde nimekiri on pikk ning asutusi, kes soovivad andmeid liidestada TÖR-iga on palju. See tähendab, et antud arendustööd on võimalik ette võtta alates 2027. aastast, millega peab RaRa arvestama. Andmete jagamine RaRa ja TÖR-i vahel peab toimuma sündmuspõhiselt ja minimaalselt, keskendudes ainult vajalikele andmekategooriatele. REST66-teenuste kasutamine on levinud arhitektuuriline stiil API- de67 kujundamisel ning see on eelistatud tehniline lahendus RaRa ja TÖR-i omavaheliseks liidestamiseks, võimaldades paindlikumat andmevahetust võrreldes klassikalise X-tee lahendusega. Õiguslik volitus ja nõusolekuteenuse rakendamine on kriitilised komponendid, mis määravad, kas ja kuidas andmeid saab edastada. Süsteemi arendamisel tuleb arvestada, millises protsessis andmeid kasutatakse, millised andmed on vajalikud ja kuidas tagada nende sihipärane liikumine. 3.1.2. Eesti Hariduse Infosüsteem (EHIS) Eesti Hariduse Infosüsteemi andmete struktuur ja kasutuspraktikad Eesti Hariduse Infosüsteem (EHIS) on riiklik andmekogu, mis koondab haridussüsteemi puudutavaid andmeid.68 Registrisse kantakse andmed (üli)õpilaste, õpetajate ja õppejõudude, lõpudokumentide, 66 Vikipeedia, REST [Link] 67 Vikipeedia, Rakendusliides [Link] 68 Eesti Hariduse Infosüsteem [Link] 37 Lõpparuanne õppetoetuste ja stipendiumite, õppe- ning koolitusasutuste, õppekavade ning koolitus- ja tegevuslubade, majandustegevusteadete ning õppe läbiviimise õiguse kohta.69 EHIS on üles ehitatud mitmetasandiliselt, hõlmates erinevaid registreid ja alamregistreid, mis võimaldavad struktureeritud andmehaldust. Selline ülesehitus toetab andmete tõhusat haldamist ja juurdepääsu, võimaldades kasutajatel teha päringuid konkreetsete haridusvaldkondade kohta. Andmete tõesus EHIS-es sõltub sisestamise ajastusest. Õppeaasta alguses võivad andmed olla puudulikud või hilinenud, mistõttu kasutatakse ajutisi andmeid või prognoose süsteemi toimimise tagamiseks. Kasutajad on leidnud lahendusi, rakendades alternatiivsed andmeallikad või ajutisi meetmeid, kuni aktuaalsed andmed on kättesaadavad. EHIS võimaldab pärida õpetajana töötamise andmeid, sealhulgas kohaliku omavalitsuse alla kuuluvates põhikoolides ja gümnaasiumides, samuti õppejõuna töötamise andmeid. Samas ei kajastu EHIS-es töötajad, kelle koormus on alla 3 ainepunkti või kes ei ole otseselt seotud õppetööga, nagu tugipersonal ja haldustöötajad. Andmete liikumine EHIS-e ja teiste süsteemide vahel toimub riigi andmevahetuskihi (X-tee) vahendusel liideste (API) kaudu, mis võimaldavad andmete sünkroonimist ja vahetust. EHIS-ega on liidestunud mitmed haridusasutused, kohalikud omavalitused ja teised haridusega seotud organisatsioonid. Tuleviku liidestusvõimalused ja arendusvajadused Eesti Hariduse Infosüsteemi (EHIS) arenduste suund liigub järjest enam kasutajamugavuse, funktsionaalsuse ja süsteemidevahelise koostöö parandamise suunas. Üheks oluliseks arengusuunaks on EHIS-e liidestamine teiste riiklike infosüsteemidega, sealhulgas Eesti Rahvusraamatukogu infosüsteemidega, et tagada haridusandmete tõhus haldus, säilitamine ja taaskasutus. Liidestamine EHIS-e ja Eesti Rahvusraamatukogu vahel on tehniliselt võimalik läbi X-tee andmevahetusplatvormi, mis võimaldab turvalist ja standardiseeritud andmevahetust. Selleks tuleb tagada süsteemide arhitektuuriline sobivus, dokumenteerida liidestusnõuded ning kooskõlastada andmevahetus vastavalt riiklikele infosüsteemide haldusprotseduuridele. Arendusprotsess hõlmab liideste loomist või kohandamist, testimist ning turvanõuete täitmist. Kui kõik tehnilised ja õiguslikud eeldused on täidetud, saab liidestuse kasutusele võtta ning tagada selle jätkusuutlik toimimine. Alla 3 EAP-e ametikoha koormusega ning muude akadeemiliste ja mitte-akadeemiliste töötajate puhul peab RaRa tegema ligipääsuõiguse tuvastamiseks päringu TÖR-i. Liidestusprojekti ajakava sõltub osapoolte valmisolekust ja ressurssidest. Haridus- ja Teadusministeeriumi sõnul tuleb varakult arendusplaanidesse sisse planeerida RaRa soovid, kuid tuleb 69 Riigi Infosüsteemi haldussüsteem, EHIS [Link] 38 Lõpparuanne arvestada, et liidestusprojekti elluviimine võib võtta aega 6-12 kuud, mida on näidanud sarnased projektid. Arenduste käigus pööratakse tähelepanu ka andmenõusolekuteenusega liitumisele, mis tagab andmete kasutamise läbipaistvuse ja turvalisuse. Samuti on fookuses autentimis- ja autoriseerimismehhanismide täiustamine, et kaitsta andmeid volitamata juurdepääsu eest. Lisaks tehnilistele arendustele rõhutatakse vajadust kasutajate koolituse ja tugiteenuste järele, et tagada süsteemi tõhus kasutamine. Kavandatakse koolitusprogramme ja tuge, mis aitavad kasutajatel paremini mõista süsteemi võimalusi ja piiranguid. Samuti on oluline pidev andmete kvaliteedi parandamine, milleks rakendatakse erinevaid tööriistu ja meetodeid. Koostöö teiste asutustega, sealhulgas kultuuri- ja teadusasutustega, on võtmetähtsusega, et tagada andmete ühtsus ja sujuv liikumine erinevate infosüsteemide vahel. 3.1.3. Sotsiaalkaitse Infosüsteem (SKAIS) Sotsiaalkaitse Infosüsteemi andmete struktuur ja kasutuspraktikad Sotsiaalkaitse infosüsteem (SKAIS) on Eesti riiklik andmekogu, mida haldab Sotsiaalkindlustusamet. Infosüsteemi eesmärk on toetada avalike ülesannete täitmist, sealhulgas riiklike toetuste, pensionide, hüvitiste ja elatisabi määramine ja maksmine, ohvriabi korraldamine, puude raskusastme tuvastamine, abivahendite, sotsiaalse rehabilitatsiooni ja erihoolekandeteenuste haldamine.70 SKAIS on osa riigi infosüsteemist ja selle kasutamine toimub vastavalt Sotsiaalkaitse infosüsteemi põhimäärusele71 ja Sotsiaalseadustiku üldosa seadusele.72 SKAIS2 süsteemis on talletatud mitmed puude tuvastamisega seotud andmed, sealhulgas puude liik, raskusaste ja funktsioonihäired. Samas ei kajastu süsteemis need isikud, kes ei ole puuet taotlenud, mistõttu ei pruugi andmestik olla täielik, kui eesmärk on tuvastada potentsiaalselt soodustatud kasutajaid, kellel on eriõigus teenustele. Andmete ajakohasus sõltub otsuste kehtivusest ja muudatustest. Kui puude otsus lõpetatakse ennetähtaegselt ja tehakse uus otsus, kajastub see infosüsteemis, sealjuures on nähtavad nii uue otsuse alguskuupäev kui kehtivuse lõpp. Seega on andmed süsteemis olemas, kuid praegune X-tee teenus ei võimalda pärida puudeotsuse kehtivuse kuupäevi, vaid tagastab ainult jah/ei vastuse isikukoodi alusel. See tähendab, et kuigi SKAIS2-s on vajalikud andmed olemas, ei ole nende detailne pärimine tehniliselt veel võimalik olemasoleva teenuse kaudu. Tuleviku liidestusvõimalused ja arendusvajadused 70 Sotsiaalkaitse Infosüsteem [Link] 71 Sotsiaalkaitse infosüsteemi põhimäärus [Link] 72 Sotsiaalseadustiku üldosa seadus [Link] 39 Lõpparuanne RaRa jaoks on oluline, et tulevikus oleks võimalik ÜÜRS liidestada SKAIS2 infosüsteemiga, et automatiseerida soodustatud kasutajate staatuse kontrolli ning pakkuda teenuseid tõhusamalt neile, kellel on tervislikel põhjustel erivajadused. Selline liidestus võimaldaks vähendada käsitsi tehtavaid toiminguid ja parandada andmete kvaliteeti raamatukoguteenuste pakkumisel. Liidestus Sotsiaalkindlustusameti SKAIS2 ja ÜÜRS vahel eeldab selget õiguslikku alust (nt avaliku ülesande täitmine või seadusjärgse kohustuse täitmine vastavalt IKÜM artiklile 6, täpselt määratletud andmekoosseise ja eesmärke ning vastavust X-tee ja RIHA (Riigi infosüsteemi halduse infosüsteem73) tehnilistele ja halduslikele nõuetele. Andmevahetus peab olema sihipärane ja õigustatud, keskendudes üksikisiku staatuse valideerimisele. Masspäringuid tuleb vältida. Praegu on olemas X-tee teenus, mis võimaldab isikukoodi alusel kontrollida puude olemasolu, kuid ei anna infot otsuse kehtivuse ega sisuliste detailide kohta. Kuigi SKAIS2-s on puudeotsuse kehtivuse andmed olemas, ei võimalda praegune X-tee teenus neid pärida – seega ei ole andmete automaatne edastamine RaRa ja SKAIS2 vahel tänasel hetkel tehniliselt ega õiguslikult võimalik. Tulevikus tuleb arendusvajaduste kavandamisel arvestada eelkõige sellega, et igasugune liidestus peab olema kooskõlas kehtiva õigusraamistikuga ning andmetöötluse alused peavad olema selgelt määratletud ja dokumenteeritud. Arendusvajaduste lisamine SKAIS-i teekaardile eeldab nende kaitsmist juhtrühmas ning arendusprotsessi integreerimist seadusloomega. Arenduste ajakava on tihe – 2026. ja 2027. aasta plaanid on sisuliselt täis, mistõttu suuremad muudatused on realistlikud alles alates 2028. aastast. Arendustööde maksumus sõltub teenuse keerukusest, kuid keskmiselt võib see ulatuda 50 000 euroni, millele lisandub käibemaks. Tulevikus võivad Euroopa Liidu puudega isiku digikaardi lahendused pakkuda uusi võimalusi andmete valideerimiseks, kuid need on hetkel alles disainifaasis. 3.1.4. Tervise Infosüsteem (TIS) Tervise infosüsteem (TIS) on keskne riiklik andmekogu, mille kaudu saavad tervishoiuteenuste osutajad, näiteks arstid ja õed omavahel andmeid vahetada ning tutvuda teiste spetsialistide poolt patsiendi kohta edastatud terviseandmetega. Tervishoiuteenuse osutajatel on kohustus andmeid Tervise infosüsteemi (TIS) edastada.74 RaRa projektis kavandati TIS-i liidestamist ÜÜRS-iga, et võimaldada isiku tervisetõendi päringut ning selle alusel soodustatud kasutaja staatuse määramist. Sotsiaalministeeriumi sõnul on TIS sulgemisel ning arutamisel on eri süsteemide ühendamine, mistõttu ei ole lähiajal võimalik terviseandmeid 73 RIA andmevahetuse abikeskus, RIHA olemus ja põhimõtted [Link] 74 Tervise infosüsteem [Link] 40 Lõpparuanne infosüsteemist automaatselt pärida. RaRa peab oma liidestusvajadused tulevikus esitama Sotsiaalministeeriumile, kes koordineerib sotsiaalvaldkonna infosüsteemide arendusi. 3.1.5. Rahvastikuregister (RR) Rahvastikuregistri andmete struktuur ja kasutuspraktikad Rahvastikuregister on andmekogu, mis koondab rahvastikuregistri andmesubjektiks olevate isikute peamised isikuandmed. Rahvastikuregistri andmeid kasutatakse riigile, omavalitsusele ning füüsilistele või juriidilistele isikutele pandud avalike ülesannete täitmiseks. Nende täitmisel lähtutakse rahvastikuregistrisse kantud põhiandmetest. Registrit haldab ja arendab vastutava töötlejana Siseministeerium ja volitatud töötlejana Siseministeeriumi infotehnoloogia- ja arenduskeskus (SMIT).75 Rahvusraamatukogu juurdepääsulahendus on liidestatud Rahvastikuregistri X-tee teenusega RR86, mis võimaldab tuvastada alaealised lapsed ning kõik eestkostetavad, sealhulgas täisealised. Teenus ei piirdu ainult alaealiste eestkostetavate või eestkostjatega, vaid annab laiemat infot. Kasutusel on ka päring RR86LapseVanemad.v1, mis võimaldab tuvastada lapse vanema või eestkostja. Andmed on juba hetkel kättesaadavad ja kasutatavad reaalajas. Isiku surma tuvastamiseks on võimalik kasutada teenust RR404, mis sisaldab surma kuupäeva, isiku staatust (E-elus, S-surnud, P-andmed puuduvad). Teenuse RR404_isik kaudu kontrollitakse täna isiku sissekirjutuse aadressi kohaliku omavalitsuse (KOV) täpsusega. KOV andmeid kasutatakse statistilistel eesmärkidel, näiteks kord aastas kindla kuupäeva seisuga. Surmaandmeid saab seega regulaarselt kontrollida sama teenuse kaudu. Kui üksikpäring ei ole piisav, on võimalik arendada täiendav teenus, mis väljastab kõikide surnud isikute isikukoodid kindla kuupäeva seisuga. Sellise teenuse kasutamiseks tuleb taotleda eraldi juurdepääsu. Tuleviku liidestusvõimalused ja arendusvajadused Rahvastikuregistri süsteemid on liidestatud mitmete X-tee teenustega, mis võimaldavad reaalajas andmepäringuid. Hetkel on testimisel uued REST-põhised X-tee teenused, millele tuleb üle minna hiljemalt 31.12.2026. See muudatus tähendab vajadust olemasolevate SOAP-põhiste teenuste ümberkujundamiseks REST-teenusteks, süsteemide testimist ning valideerimist uue liidestusloogika alusel. Arendustöö maht sõltub liidestatavate teenuste arvust, olemasolevate süsteemide valmisolekust ning vajadusest arendada uusi päringumooduleid. Täielik liidestus Rahvastikuregistriga eeldab kõigi vajalike päringute kaardistamist, REST-teenuste rakendamist ning süsteemide valmisolekut andmete reaalajas töötlemiseks. Koostöö Siseministeeriumi ja SMIT-i esindajatega on vajalik juurdepääsude taotlemiseks ja arenduste koordineerimiseks. 75 Rahvastikuregister [Link] 41 Lõpparuanne Rahvastikuregister on liitunud andmejälgija teenusega, mis suurendab andmekasutuse läbipaistvust ning tagab andmekaitse nõuete täitmise. 3.1.6. Õppeinfosüsteemid (ÕIS) ÕIS-2 on ametlik õppeinfosüsteem, mida kasutavad õpingute planeerimiseks, õppetöö läbiviimiseks ja selles osalemiseks üliõpilased, õppejõud ning mitteakadeemiline personal. Infosüsteemi eesmärk on ühtse ja turvalise internetipõhise infokeskkonna võimaldamine kõrg- ja kutsekoolidele õppetööga seotud informatsiooni haldamiseks. Õppeinfosüsteemide arendamine ei toimu keskselt, mistõttu sõltuvalt õppeasutustest on jooksvalt teostatud erinevaid süsteemi edasiarendusi. Valdkond on seetõttu killustunud ja võimalikud liidestused õppeinfosüsteemiga tähendavad iga osapoolega eraldiseisva andmevahetuse loomist, mis võib osutuda ebamõistlikult ressursikulukaks. Samuti on teadaolevalt ülikoolid välja töötamas kava uue õppeinfosüsteemi loomiseks, mis vastaks paremini nende tänastele vajadustele. Eeltoodust tulenevalt käesoleva projekti raames õppeinfosüsteemidega andmevahetuse loomist täiendavalt ei ole käsitletud, kuivõrd sama andmestik on kättesaadav ka Eesti Hariduse Infosüsteemis. 3.2. Raamatukoguteenused sündmusteenuste kontseptsioonis 3.2.1. Sündmusteenused raamatukoguteenuste kontekstis Sündmusteenused on osa sündmuspõhisest arhitektuurist (Event-Driven Architecture, EDA), mis kujutab endast tarkvaraarhitektuuri mustrit, kus süsteemi komponendid suhtlevad üksteisega sündmuste kaudu. Sündmus on süsteemis toimunud märkimisväärne muutus – näiteks kasutaja tegevus, andmeoleku muutus või süsteemisisene sündmus. EDA eesmärk on luua lahtiselt seotud, paindlikke ja reaalajas reguleerivaid süsteeme, mis võimaldavad komponentidel töötada sõltumatult ja paralleelselt. EDA tugineb kolmele põhikomponendile: 1. Sündmuse tootja (producer) – komponent, mis genereerib sündmuse. 2. Sündmuse edastaja (event broker/router) – vahendaja, mis suunab sündmuse edasi. 3. Sündmuse tarbija (consumer) – komponent, mis reageerib sündmusele. Sündmusteenuste kontseptsioon rakendab EDA põhimõtteid avalike teenuste pakkumisel, eesmärgiga muuta nende kasutamine inimese jaoks võimalikult lihtsaks ja mugavaks. Teenused koondatakse üheks 42 Lõpparuanne sujuvaks elu- või ärisündmusteenuseks, kus riigi toimimise keerukus jääb kasutajale nähtamatuks. Teenuse osutamine initsieeritakse võimalusel automaatselt, kui vajalikud andmed on olemas. 76 Raamatukoguteenused, nagu laenutamine ja kasutaja haldamine, sobituvad sündmusteenuste raamistikku kui osa elusündmusest, näiteks: • Laenutamine võib olla seotud inimeste terviseandmete muutumisega või muutustega, mis on seotud eestkostja määramisega või lapsevanema andmete muutumisega. • Kasutaja haldamine võimaldab sündmuse kontekstis automaatselt uuendada kasutaja olekut (nt aktiivne/mitteaktiivne kasutaja, eriõiguse olemasolu või lõppemine, alaealise täisealiseks saamine, eestkostja olemasolu või muutumine) ja kontaktandmeid (nt aadressi, e-posti või telefoninumbri muutus) või ligipääsuõigusi (nt laenutusõiguse kehtivus, juurdepääs piiratud kogudele), kui need on andmekogudes muutunud. Selline lähenemine võimaldab raamatukoguteenustel olla aktiivne osa sündmusteenusest, pakkudes kasutajale sujuvat ja olukorrale vastavat teenust. Näiteks abiellumise sündmusteenuse puhul saab inimene lisaks digitaalsele abieluavaldusele automaatselt uuendada oma raamatukogu kasutajakonto uue nimega. Samuti võib süsteem soovitada pereeluga seotud kirjandust, mis sobib uue eluetapiga. Kasutaja ei pea ise erinevate asutuste poole pöörduma ning teenus toimib taustal ja on kasutajale nähtamatult mugav. Sarnane lähenemine kehtib ka laenutamise puhul. Näiteks kui inimene jääb pensionile, võib sündmusteenus automaatselt pakkuda talle võimalust pikendada raamatukogu laenutamise tähtaegu, saada ligipääsu eritingimustega teenustele (nt pikem laenutusaeg või tasuta e-raamatud) ning soovitada temaatilist kirjandust, mis toetab uue eluetapi vajadusi ja huve. Teenus kohanduks kasutajaolukorrale, ilma, et ta peaks ise eraldi taotlusi esitama. Raamatukoguteenuste sidumine sündmusteenustega aitab kaasa Eesti digiühiskonna eesmärkidele: vähem bürokraatiat, rohkem kasutajakesksust ja kulutõhusust.77 3.2.2. Laenutamine ja kasutaja haldamine sündmuspõhises raamistikus Sündmuspõhises kontseptsioonis käsitletakse raamatukoguteenustena järgnevaid lugejatele suunatud teenuseid: laenutamine ja kasutaja haldamine. Raamatukoguteenuste kasutamisel tehakse avaliku ülesande täitmiseks ja päringud teistesse andmekogudesse, et tuvastada kasutaja eriõiguste olemasolu soodustuste saamiseks või ligipääsu 76 Event-Driven Arhitecture (EDA) [Link] 77 Riigi Infosüsteemi Amet, Sündmusteenuste platvorm [Link], Justiits- ja Digiministeerium, Sündmusteenused [Link] 43 Lõpparuanne andmiseks neile suunatud materjalidele (nt kooli õppematerjalid), samuti teovõime olemasolu materiaalse vastutuse võtmiseks (sh vajadusel volitus või lapsevanema nõusolek), mis laenutusega kaasneb. Kui päringu käigus selgub, et kasutajal on määratud eeskostja, ei ole tema antud nõusolek kehtiv ning päringut ei tohiks teha ilma eestkostja loata. Alaealise puhul tuleb päringu tegemiseks üldjuhul küsida lapsevanema või eeskostja nõusolekut või peab päringu tegemise õiguslik alus tulenema seadusest. Järgnevas tabelis (Tabel 6) kirjeldatud teenused ja kasutatavad süsteemid. Teenus Kirjeldus Süsteemid Laenutamine Laenutusteenuse kasutaja on end raamatukogusüsteemis • URRAM või raamatukogu jaoks tuvastanud ning saab teha teavikute • RIKS ja esemete laenutamise, reserveerimise ja tagastamisega • Sierra seotud tegevusi. Laenutamisteenus hõlmab kojulaenutust, • ÜÜRS kodulaenutust, raamatukogudevahelist laenutust (RVL), • Raamatukogu kodulehekülg seadmete ja asjade kojulaenutust, raamatukapi või • Raamatukapp pakiautomaadi kasutamise ning iseteeninduskioski • Iseteenindus kasutamist. Andmekogu kuhu tehakse päring: • EHIS Laenutamisteenuse kasutamisel kontrollitakse kasutaja • TÖR õigusi – näiteks, kas on määratud eestkostja või kas • RR alaealisel kasutajal on kehtiv volitus. Kui tuvastatakse, et kasutajal on eeskostja, tuleb päringu tegemiseks saada eeskostja nõusolek. Samuti tuleb alaealise puhul päringu tegemiseks küsida lapsevanema või eestkostja nõusolekut, va juhul, kui päringu tegemise õiguslik alus tuleneb seadusest. Kasutajate Kasutajate haldamine sisaldab raamatukogu lugejate • ÜÜRS haldamine kasutajakontode haldamisega seotud tegevusi: kasutajaks • Telefon registreerimine, andmete vaatamine ja muutmine, kasutaja • E-kiri kustutamine, kasutaja tegevuste registreerimine ja analüüs • Sotsiaalmeedia ning kasutajaga kontakteerumine. Andmekogu kuhu tehakse päring: Kasutajate haldamine hõlmab ka RR-i andmekogu • RR päringuid, et tuvastada kasutaja eestkoste ja • SKAIS alaealise/lapsevanema seoseid, sh kasutajakonto sulgemise • EHIS alused kui isiku kohta on registrisse esitatud surmateade. • TÖR • Tervise infosüsteem Tabel 6. Sündmuspõhise kontseptsiooni raamatukoguteenused Järgmises peatükis on detailsemalt kirjeldatud raamatukoguteenuste kasutajateekonnad võttes aluseks eelnevalt kirjeldatud teenused. 3.3. Raamatukoguteenuste võimalikud kasutajateekonnad Kasutajateekonna kirjelduse eesmärgiks on aidata tuvastada kasutaja vajadused, et mõista kasutaja eesmärke ja konteksti, visualiseerida interaktsioone süsteemiga ning tuua välja võimalikud kitsaskohad ja parendusvõimalused. Käesolevas peatükis on kasutajateekonnad kirjeldatud teenuste lõikes. Iga teenuse puhul on välja toodud peamised etapid ja tegevused, sh andmekogu päringud ning riskikohad ja väljakutsed. Teenuste käsitlus 44 Lõpparuanne on struktureeritud sihtrühmade kaupa: soodustatud kasutaja, haridussüsteemi kasutaja ja volitatud kasutaja. 3.3.1. Kasutajakonto loomine ja haldamine Kasutaja loomine Raamatukoguteenuste kasutamiseks peab isikul olema kehtiv kasutajakonto. Konto loomine hõlmab autentimist, isikuandmete registreerimist ning vajadusel eriõiguse taotlemist. Eriõiguse taotlemine ei ole kohustuslik konto loomise hetkel – see võib toimuda ka hiljem, kui kasutaja vajadused või õiguslik alus muutuvad. Soodustusega kasutaja puhul tuvastatakse eriõigus RaRa poolt avaliku ülesande täitmise raames, tuginedes isikuandmete kaitse üldmääruse (IKÜM) artikli 6 lõike 1 punktile e. Kuna tegemist on avaliku ülesandega, ei ole nõusolek terviseandmete töötlemiseks sobiv õiguslik alus. Eriõiguse tuvastamiseks tehakse otsepäringud: • SKAIS2- puude määramise otsuste kontrollimiseks; • TIS- tervisetõendite kontrollimiseks, mis viitavad lugemisraskusele. Kui kasutaja soovib eriõigust, tehakse päring vastavalt seadusele. Kasutajal ei ole võimalust päringust keelduda, kuna päringu tegemise õiguslik alus tuleneb avaliku ülesande täitmisest. Kui päringud ei anna tulemust, tuleb kasutajal esitada eriõigust tõendav dokument. RaRa töötaja hindab dokumendi sobivust, lähtudes kehtivatest juhistest ja kriteeriumitest. Eriõiguse kehtivuse kontrolli võib teostada ka hiljem, näiteks konto uuendamise käigus, tuginedes samale õiguslikule alusele. Haridussüsteemi kasutaja õigusi ei tuvastata konto loomisel, vaid laenutamise hetkel (vt 3.3.2). Erandiks on olukorrad, kus RaRa teenustega liituvad kooliraamatukogud (nt MIRKO kaudu). Sellisel juhul toimub kasutajakontode loomine automaatselt EHIS-e andmete alusel, tuginedes haridusasutuse volitusele ja seaduslikule alusele. Tegemist on eraldi töövööga, kus EHIS-est tehakse masspäring liitunud kooli õpilaste ja õpetajate kohta ning luuakse kontod e-kataloogi alla vastava kooli raamatukogu lugejatena. Kõigi kasutajate puhul tehakse päring Rahvastikuregistrisse, et kontrollida eestkoste olemasolu, volituse kehtivust, alaealise ja tema seadusliku esindaja seoseid. Alates 13. eluaastast saab Eesti isikukoodi omav isik end registreerida. Kui konto luuakse volitatud isiku poolt, tuleb volitus esitada konto loomisel. Kasutaja loomise protsess on välja toodud alljärgneval skeemil Joonis 5. 45 Lõpparuanne Joonis 5. Kasutaja loomise protsessiskeem Kasutaja loomise etapid on välja toodud Tabel 7. Kasutaja loomine etappide lõikes, mis täpsustab iga sammu sisulise kirjelduse ja seotud süsteemid. Etapp Kirjeldus Süsteem • RR 1. Autentimine Logib sisse (ID-kaart, Smart-ID, mobiil-ID, salasõna). Kasutaja täidab taotluse. Eritingimuse osas teeb vastava 2. Taotluse täitmine märke. Soodustuse saamiseks päritakse andmed. Kui andmed tõendavad soodustust, luuakse soodustusega kasutaja. Kui • SKAIS2 3. Päringu teostamine andmed ei tõenda soodustust, siis valib kasutaja, kas • TIS registreerib end tavakasutajaks või laeb üles eriõigust tõendava dokumendi. Kasutaja laeb üles eriõigust tõendava dokumendi, kui 3.1. Dokumendi lisamine päringu käigus andmed soodustust ei tõendanud. 3.2. Menetlus Raamatukogu töötaja teeb otsuse. Kasutajakontole märgitakse kehtivusajaga eriõigus, kui alus selleks on andmekogudes olemas või raamatukogu töötaja 4. Eriõiguse määramine poolt valideeritud. Kui esitatud dokument ei vasta nõuetele, ei rakendata erisoodustust ja luuakse tavakasutaja konto. Saab kinnituse, et kasutaja on loodud (kas soodustusega või 5. Teavitus soodustuseta). Tabel 7. Kasutaja loomine etappide lõikes 46 Lõpparuanne Kasutajakonto haldamine Kasutajakonto haldamine hõlmab andmete perioodilist ülevaatamist ja uuendamist, sh vajadusel nõustumist muutunud kasutajatingimustega. RaRa eeldab, et kasutaja vaatab oma andmed üle vähemalt kord aastas. Andmete uuendamise algatus võib tulla nii kasutajalt kui süsteemilt. Näiteks juhul, kui kasutaja ei ole aasta jooksul sisse loginud, algatab süsteem päringu Rahvastikuregistrisse, et kontrollida isiku staatuse muutusi (nt surm, eestkoste, vanemlik seos). Kui kasutaja logib ise sisse, saab ta andmeid üle vaadata ja vajadusel täiendada. Kui kasutaja ei ole sisse loginud 3 aasta jooksul, kustutab süsteem automaatselt kasutajakonto. Kui kasutajal on määratud eriõigus, kontrollib süsteem selle kehtivust avaliku ülesande täitmise alusel (IKÜM art. 6(1)(e)) otsepäringutega SKAIS2 ja TIS infosüsteemidesse. Nõusolekut ei küsita, kuna see ei ole sobiv õiguslik alus terviseandmete töötlemiseks. Erandiks on mugavusteenused, kus kasutaja saab ise otsustada, kas soovib andmete kontrolli. Kooliraamatukogude kontekstis (nt MIRKO kaudu) tuleb arvestada, et puhtalt koolisisene raamatukogu ei teeninda väljaspool kooli isikuid. Seetõttu peab süsteem perioodiliselt kontrollima, kas õpilane või õpetaja on koolist lahkunud. Kui isik, ei kuulu enam kooli sihtrühma, suletakse tema konto. Rahvaraamatukogu, mis tegutseb ka kooliraamatukoguna, võib andmeid uuendada, mitte kontot sulgeda, sõltuvalt teenuse ulatusest. Kasutajakonto haldamise protsess on välja toodud alljärgneval skeemil Joonis 6. 47 Lõpparuanne Joonis 6. Kasutajakonto haldamise protsessiskeem Järgnevalt on välja toodud kasutaja konto uuendamine etappide lõikes Tabel 8. Etapp Kirjeldus Süsteem 1. Autentimine Logib sisse (ID-kaart, Smart-ID, mobiil-ID, salasõna). • RR 2. Kasutajakonto Tutvub enda andmetega, uuendab. andmetega tutvumine ja uuendamine 3. Päringu teostamine Kontrollitakse eritingimuste vastavust süsteemidest • SKAIS2 • TIS 4. Teavitus Saab kinnituse, et kasutaja andmed on uuendatud. Tabel 8. Kasutajakonto uuendamine etappide lõikes Kui kasutaja ei ole sisse loginud ühe aasta möödudes, siis teostatakse andmete automaatne päring Rahvastikuregistrist. Kui süsteem vastas surmafaktile jah või kasutaja on olnud mitteaktiivne kolm aastat, siis raamatukogutöötaja saab automaatteavituse süsteemist, mille järgselt sulgeb raamatukogutöötaja kasutajakonto. Riskid ja väljakutsed Kasutajakontode haldamisega seotud riskid tulenevad eelkõige andmete ajakohasuse tagamise vajadusest ning sellega seotud õiguslikest ja tehnilistest piirangutest. Kui kasutaja andmed muutuvad pärast konto 48 Lõpparuanne loomist, näiteks eestkoste lõpeb, isik lahkub haridusasutusest või surma fakt registreeritakse, ei pruugi see info jõuda RaRa-ni enne korralist andmete uuendamist allikregistris. Sellest tulenevalt on oluline, et süsteem suudaks algatada perioodilisi päringuid registritesse, et tagada teenuse õiguspärasus ja vältida teenuse osutamist isikutele, kes enam tingimustele ei vasta. 3.3.2. Laenutusteenuse kasutamine Laenutusteenuse kasutajateekonnad on kirjeldatud käesoleva analüüsi sihtrühmade lõikes (soodustatud kasutaja, haridussüsteemi kasutaja, volitatud kasutaja). Laenutusteenust saavad kasutada üle 18- aastased teovõimelised kasutajad. Kui kasutaja on alla 18-aastane, peab tal teenuse kasutamiseks olema eestkostja või lapsevanema nõusolek. Tuleb arvestada, et ka täisealisel kasutajal võib olla määratud eestkoste, mis tähendab, et tal ei pruugi olla õigust laenutusteenust iseseisvalt kasutada – teenuse kasutamiseks on vajalik eestkoste seadusliku esindaja nõusolek. Laenutusteenuse kasutamisel kasutaja kontrollib ja kinnitab vormistamisel oleva tellimuse ehk välja valitud väljaanded. Sõltuvalt väljaannete formaadist saab kasutaja tellitud materjalile kas digitaalse juurdepääsu või peab selle kättesaamiseks minema etteantud asukohta, näiteks raamatukokku, pakiautomaati või raamatukappi. Kui kasutaja valib kohaletoimetamise viisiks kulleri, toimetatakse väljaanne tema tellimisel märgitud aadressile. E-laenutuse puhul toimub laenutuse alustamine kohe nupu „Laenuta“ vajutamisel, mis käivitab kuulamise või lugemise ning vajadusel kontrolli, kas kasutajal on õigus väljaannet laenutada. Laenutusteenuse protsess on välja toodud alljärgneval skeemil Joonis 7. Joonis 7. Laenutusteenuse protsessiskeem 49 Lõpparuanne Soodustusega kasutajal on eriõigus märgitud kasutajakontole ja laenutamisel päringuid andmekogudesse selle õiguse kontrollimiseks ei teostata. Õigus on eelnevalt tuvastatud ja salvestatud RaRa andmekogus. Haridussüsteemi kasutaja puhul teostatakse laenutamise hetkel päring EHIS-esse või TÖR-i, kui tellimuses sisalduvad väljaanded, mille laenutamise õigus on ainult teatud sihtrühmadel (nt kooli õppematerjalid). Õiguslik alus ei saa tuleneda koostöölepingus antud volitustest, sest EHIS-e andmekogu vastutav töötleja ei ole haridusasutus vaid Haridus- ja Teadusministeerium. Kui ERRS-ist tulenevat RaRa üldeesmärki tõlgendada laialt, saba sobilikuks aluseks lugeda avaliku ülesande täitmist. TÖR-i puhul kehtib sama loogika ehk päring tehakse avaliku ülesande täitmise eesmärgil. Volitatud kasutaja puhul on oluline eestkostja nõusoleku olemasolu, mida on võimalik vormistada digitaalselt enne laenutamise teenuse kasutamist. Alaealisele vormistatud nõusolek kehtib kuni kasutaja 18-aastaseks saamiseni. Täisealise piiratud teovõimega isiku puhul tuvastatakse seaduslik esindaja Rahvastikuregistri päringu kaudu. Kõigi kasutajate puhul tehakse laenutamise hetkel päring Rahvastikuregistrisse, et kontrollida eestkoste olemasolu. Kui isikul on eestkoste, ei saa ta võtta materiaalset vastutust – selle saab teha ainult eestkostja. Järgnevalt on välja toodud laenutamise teenus etappide lõikes Tabel 9. Etapp Kirjeldus Süsteem 1. Väljaannete valimine Kasutaja valib e-laenutuse ja tavalaenutuse korral väljaande. 2. Laenutamine Tavalaenutusel lisab kasutaja väljaande laenutuskorvi. E- laenutusel laenutuskorv puudub. 3. Eritingimuste kontroll Kui tellimuses sisalduvad raamatud, mida saavad • EHIS laenutada ainult teatud tingimustele vastavad kasutajad • TÖR (õpilane, õpetaja), teostatakse päringud EHIS-sest, TÖR-ist• RR ja RR-ist laenutamisega seotud piirangute kontrollimiseks. 4. Laenutuse Kui eritingimuste kontrolli alusel võib kasutaja väljaandeid vormistamine laenutada, saab kasutaja alustada väljaande lugemist/kuulamist. Vastasel juhul ei ole võimalik väljaandeid laenutada. Tavalaenutusel valib kasutaja kohaletoimetamise viisi: pakiautomaadi/kulleri või ise järele tulemise. Valikute tegemise järel kuvatakse kasutajale, et tellimus on edukalt tehtud. Tabel 9. Laenutamise teenus etappide lõikes Riskid ja väljakutsed Laenutamisteenusega seotud peamised riskid tulenevad andmekogude võimalikust ebatäpsusest, kus kasutaja kohta tehtud päringud ei vasta tegelikkusele (nt õpilane on eksmatrikuleeritud). Sellised juhtumid võivad põhjustada teenuse osutamist isikutele, kes ei vasta enam sihtrühma tingimustele. 50 Lõpparuanne 3.4. Õiguslikud alused Käesolev peatükk annab ülevaate läbiviidud õigusanalüüsist. Analüüs keskendub sellele, millistel õiguslikel alustel võib RaRa ÜÜRS-i haldajana töödelda terviseandmeid ja muid isikuandmeid, et võimaldada ligipääs teavikutele erivajadustega inimestele, haridussüsteemi kasutajatele ning volitatud kasutajale. Eraldi vaadeldakse ka andmetöötluse proportsionaalsuse, eesmärgipärasuse ja minimaalsuse põhimõtteid. Analüüsis võrreldakse erinevaid õiguslikke aluseid, nagu nõusolek, lepingu täitmine, seadusjärgse kohustuse täitmine ja avaliku ülesande täitmine, ning hinnatakse nende sobivust konkreetsete teenuste osutamisel. Eraldi käsitletakse ka andmevahetust riiklike registritega (SKAIS, TIS, EHIS, TÖR) ning sellega seotud õiguslikke ja praktilisi küsimusi. Lisaks analüüsitakse kasutajate surma korral teenuste lõpetamist ning teavituste saatmise õiguslikke aluseid. Terviklik käsitlus võimaldab RaRa-l hinnata oma andmetöötluspraktikate vastavust kehtivatele andmekaitsenõuetele ning kavandada tulevikus vajalikke muudatusi teenuste kvaliteedi ja õiguspärasuse tagamiseks. Soodustatud isikute õigus saada juurdepääs autoriõigusega kaitstud teostele Autoriõiguse seaduse alusel on soodustatud isikutel õigus saada juurdepääs autoriõigusega kaitstud teostele neile ligipääsetaval kujul ilma autori loata. Andmete töötlemise eesmärk on kontrollida isiku õigust seadusest tulenevale erandile, st. veenduda, et teos antakse ligipääsetaval kujul isikule, kellel on seadusest tulenev õigus seda saada. Raamatukogu töötleb andmeid, mis annavad teavet isiku tervisliku seisundi kohta, mis kuuluvad isikuandmete kaitse üldmääruse (IKÜM) artikli 9 lg 1 alusel eriliigiliste isikuandmete hulka. Artikkel 4 punkt 15 määratleb terviseandmed kui isikuandmed, mis on seotud inimese füüsilise või vaimse tervisega, sh andmed, mis tekivad tervishoiuteenuste osutamisel ja mis annavad teavet inimese tervisliku seisundi kohta. Koos määruse põhjendusega 35 tähendab see, et terviseandmeteks loetakse kõik isikuandmed, mis annavad teavet inimese varasema, praeguse või tulevase tervisliku seisundi kohta, sh andmed, mis on seotud talle osutatud tervishoiuteenustega. RaRa töötleb isikute terviseandmeid osana oma avalikust ülesandest, pakkudes nendele ligipääsetavas vormis teavikuid. Kuna isikuandmete töötlemine toimub avaliku ülesande täitmise raames, ei ole RaRa-l õigust lisaks küsida samade andmete töötlemiseks isiku nõusolekut, kuna see oleks eksitav ning ei vastaks IKÜM-i nõuetele. Nõusoleku kui õigusliku aluse rakendamine isikuandmete töötlemisel on asjakohane vaid juhtudel, kus isikutel on täielik otsustamisvabadus oma andmete töötlemise üle ja see ei kaasa negatiivseid tagajärgi. Nõusolek peaks olema vabatahtlik, informeeritud ja tagasivõetav, sobitudes hästi mugavusteenuste kontekstiga. Üheks oluliseks probleemkohaks on ERRS § 7 lõike 4 sõnastus, mis on üldine ega sisalda piisavalt konkreetseid juhiseid. Antud seaduse punkt näeb ette üldise informatsiooni dokumentide kohta, millega määratakse isiku õigus teavikutele ligipääsuks, kuid jätab täpsustamata konkreetsed diagnoosid või tingimused, mille alusel isikul tekib ligipääsuõigus. Praegu vastutab terviseandmete töötlemisel tõendi 51 Lõpparuanne sisulise hindamise eest RaRa töötaja, kellel ei pruugi olla piisavat meditsiinilist ekspertteadmist, et objektiivselt ja asjatundlikult hinnata diagnoosi sobivust. See võib kaasa tuua vigu õiguse tuvastamisel ning mõjutada erivajadustega isikute teenuse kvaliteeti ja kättesaadavust. Sellisest ekspertiisi puudumisest tulenevad riskid võivad kahjustada teenuse kasutaja õigusi ja suurendada ebatäpsuste ning vigade ohtu terviseandmete käsitlemisel. Oluline oleks täiendada seadust täpsustavate tingimuste ja kriteeriumitega, mis lihtsustaksid töötajatel õigete otsustuste tegemist ning vähendaksid subjektiivsuse mõju. Vastavalt tulevikukontseptsioonile on üheks oluliseks eesmärgiks võimaldada andmevahetust SKAIS2-i ja TIS-i või tulevikus loodava uue infosüsteemiga, et lihtsustada soodustatud kasutajate tuvastamist ja teenuste pakkumist neile, kellel on tervislikel põhjustel erivajadused. Liidestus SKAIS2 ja/või TIS-i ja RaRa vahel eeldab selget õiguslikku alust, milleks on tuginedes eeltoodule kaks võimalust, kas: 1. seadusjärgse kohustuse täitmine (art. 6(1)(c)) või 2. avalik ülesanne (art. 6(1)(e)). Õigusanalüüsi tulemusel tuleb pidada sobivaimaks õiguslikuks aluseks otsepäringu tegemisel SKAIS-i ja/või TIS-i RaRa poolt avaliku ülesande teostamist (art. 6(1)(e)). Vastavalt eelpool toodud tulevikukontseptsioonile on RaRa poolt SKAIS2-st kogutavate andmete hulgas ka puude määramise otsuse kehtivus või TIS-ist diagnoosi kehtivus. Proportsionaalsuse kontroll isiku terviseandmete korduvaks töötlemiseks RaRa poolt avaliku ülesande alusel (IKÜM art. 6(1)(e)) hõlmab mitmeid olulisi aspekte. Korduv kontroll peaks tagama, et andmed on ajakohased ja teenused on erivajadustega isikutele jätkuvalt kättesaadavad vastavalt nende vajadustele. Tuleb hinnata, kas sama eesmärki saab saavutada vähem sekkuvama meetodi kaudu. Arvestades, et puude või diagnoosi kehtivuse kontroll on kõige efektiivsem viis tagada teenuse asjakohasus, siis võib seda pidada proportsionaalseks. Töötlemine peab olema piiratud ainult vajalike andmetega, st ainult andmetega, mis on hädavajalikud teenuse osutamise eesmärgi täitmiseks. Peavad olema tagatud piisavad turvameetmed, et kaitsta isikuandmeid väärkasutuse, volitamata juurdepääsu ja lekkimise eest. Andmesubjektidele peab olema läbi andmejälgija teenuse tagatud läbipaistev teavitus nende andmete töötlemise eesmärgist, ulatusest ja ajakohastamisest. Nad peaksid olema teadlikud sellest, kui nende andmeid kontrollitakse ning miks seda tehakse. Kokkuvõttes võib korduvat kontrolli pidada proportsionaalseks, kui see vastab ülaltoodud kriteeriumitele ning on selgelt sidus raamatukogu avaliku ülesande täitmisega. Oluline on tagada, et korduv töötlemine aitaks reaalselt kaasa teenuse kvaliteedi ja kättesaadavuse säilitamisele erivajadustega isikutele ning oleks kooskõlas isikuandmete kaitse põhimõtetega. Haridussüsteemi kasutaja Haridussüsteemi kasutajatele teenuse osutamiseks andmetöötluse eesmärk on tuvastada, kas piiratud kättesaadavusega õppematerjalide laenutusteenust sooviv isik kuulub vastavasse sihtrühma. Samuti tuleb õigusliku aluse tuvastamiseks jaotada teenuse kasutajad kaheks: 52 Lõpparuanne 1. õppurid ja vähemalt 3 EAP ametikoha koormusega õppejõud, kelle kohta on EHIS-es andmeid ning kelle sihtrühma kuuluvuse tuvastamiseks saab teha vastava päringu EHIS-est, ning 2. õppejõud alla 3 EAP ametikoha koormusega ning muud akadeemilised ja mitte-akadeemilised töötajad, kelle andmeid ei ole EHIS-es ja kelle sihtrühma kuuluvuse tuvastamiseks peab tegema päringu TÖRi. Piiratud ligipääsuga väljaannete laenutamise teenuse pakkumiseks on RaRa sõlminud vastava haridusasutusega koostöölepingu, mille kohaselt volitab haridusasutus kui vastutav töötleja RaRa-d töötlema koostöölepingu täitmisel isikuandmeid. Olukorras on keskne küsimus, kas haridusasutus võib IKÜM-i alusel volitada RaRa-d tegema päringuid EHIS-esse õppurite ja õpetajate piiratud sihtrühma kuuluvuse kohta. IKÜM artikli 28 lõike 3 kohaselt võib volitatud töötleja töödelda isikuandmeid üksnes vastutava töötleja nimel ja dokumenteeritud juhiste alusel. Selleks peab vastutava ja volitatud töötleja vahel olema sõlmitud leping, milles on sätestatud töötlemise sisu ja kestus, töötlemise laad ja eesmärk, isikuandmete liigid, andmesubjektide kategooriad ning mõlema poole õigused ja kohustused. Vastav leping on tänases Mirkos osapoolte vahel sõlmitud. Antud juhul on probleemiks asjaolu, et EHIS on riiklik register, mille vastutav töötleja on Haridus- ja Teadusministeerium. Kui RaRa teeb päringuid otse EHISest, ei toimu andmete töötlemine enam üksnes haridusasutuse nimel, vaid RaRa omandab iseseisva juurdepääsu registrile. Sellisel juhul ei saa RaRa-d käsitleda pelgalt volitatud töötlejana, vaid tema roll võib kvalifitseeruda iseseisvaks või kaasvastutavaks töötlejaks, mis eeldab eraldi õiguslikku alust. Lepingu täitmine saab olla isikuandmete töötlemise õiguslikuks aluseks vaid juhul, kui isik, kelle andmeid töödeldakse, on lepingu pool, mistõttu ei ole käesolev koostööleping haridusasutuse ja RaRa vahel piisav õiguslik alus EHIS-andmete töötlemiseks RaRa poolt. Haridussüsteemi kasutajatele piiratud ligipääsuga õppematerjalide laenutusteenuse osutamiseks peab RaRa tuvastama, kas isik kuulub sihtrühma ja leidma selleks õigusliku aluse. Õppurid ja vähemalt 3 EAP ametikoha koormusega õppejõud saavad nende kuuluvust tuvastada läbi EHIS-e päringu. Vastava päringu sobilikuks õiguslikuks aluseks võib olla avalikus huvis oleva ülesande täitmine, eeldusel, et ERRS § 3 lg-s 1 sätestatud RaRa üldeesmärki tõlgendatakse laialt ning selle hulka arvestatakse ka kooliraamatukogudele teenuse osutamine. Kehtiva õigusraamistiku järgi on kooliraamatukogude ülesande täitmise selgesõnaline säte Põhikooli- ja gümnaasiumiseaduses § 41, mis käsitleb ainult rahvaraamatukogusid. Õiguskindluse tagamiseks oleks siiski otstarbekas täiendada ERRS § 4 sättega, mis määratleks kooliraamatukogudele teenuse pakkumise RaRa ülesandena, nagu on sätestatud pimedate raamatukogu või parlamendiraamatukoguna tegutsemise puhul. Alla 3 EAP koormusega õppejõudude ning teiste haridusasutuse töötajate puhul on teenuse olemus võrreldav õppuritele ja üle 3 EAP koormusega õppejõududele pakutava teenusega. Kuigi päring tehakse sel juhul TÖR-ist, jääb töötlemise õiguslik alus (avalikus huvis oleva ülesande täitmine) samaks. Volitatud kasutaja 53 Lõpparuanne Volitatud kasutajate puhul on vaja eristada kaks juhtumit: 1. alla 18-aastase isiku esindamine lapsevanema või eestkostja poolt; 2. täisealise isiku volitus kolmandale isikule tema eest toimingute tegemisel. RaRa teenuste osutamise eesmärgil on vajalik isikusamasuse kontroll ning piiratud teovõimega isikute puhul ka nende seadusliku esindaja tuvastamine. Alla 18-aastane isik võib teha tehingu seadusliku esindaja nõusolekul või heakskiiduga. IKÜM artikkel 6 lg 1 punkt b võimaldab isikuandmete töötlemist lepingu täitmiseks, mille pooleks on andmesubjekt. Alaealiste puhul on vajalik seadusliku esindaja nõusolek või heakskiit lepingu sõlmimise kehtivuse tagamiseks, kuid esindaja ise ei ole lepingu pool. Selle seadusliku aluse põhjal on võimalik töödelda alaealise isikuandmeid lepingu täitmiseks, kuid seadusliku esindaja andmete töötlemise aluseks on seadusjärgse kohustuse täitmine nende konkreetsete toimingute jaoks, mida selge ja täpne seadus kohustab tegema (nt alla 18-aastase esindusnõusoleku olemasolu tuvastamine/registreerimine ja selle kontroll rahvastikuregistrist tehingu hetkel). ERRS annab RaRa-le konkreetse seadusliku aluse nii alaealise lugeja kui ka seadusliku esindaja isikuandmete säilitamiseks, tingimusel, et alaealine isik on RaRa lugeja. Kehtivas õigusraamistikus puudub säte, mis annaks RaRa-le õigusliku aluse töödelda rahvaraamatukogu alaealise lugeja ja tema seadusliku esindaja isikuandmeid. Seevastu 08.05.2025 esitatud rahvaraamatukogu seaduse muudatuse eelnõu näeb ette ERRS-i täiendamist sättega, mis võimaldaks RaRa-l kui raamatukogude andmekogu haldajal töödelda ka rahvaraamatukogude alaealiste lugejate ja nende seaduslike esindajate isikuandmeid ning teha vastavate andmete saamiseks ka päringuid teistesse registritesse. Proportsionaalsuse kontrolli puhul on oluline hinnata, kas iga-aastaste korduspäringute tegemine seadusliku esindaja andmete õigsuse tagamiseks on vajalik ja põhjendatud. Esimene aspekt on juriidiline alus: ERRS ei maini otseselt andmete õigsuse kontrolli, kuid raamatukogu teenust võib käsitleda avalikes huvides oleva ülesandena. Seadusliku esindaja andmete täpsus võib aidata maandada varalise kahju riske, mis on raamatukogu jaoks oluline. Siiski, proportsionaalsuse kriteeriumi rakendamisel peab kaaluma, kas korduv päring on tõepoolest teenuse osutamiseks hädavajalik. Kui tehingu kehtivus ja teenuse pakkumine ei sõltu otseselt iga-aastasest andmete kontrollist, siis võib sellist tegevust pidada ebaproportsionaalseks. Kuigi varalise kahju vältimine on oluline, ei pruugi massiline, tehinguväline ja perioodiline kontroll olla õigustatud, eriti kui selline kontroll ei mõjuta otseselt tehingu legitiimsust või teenuse katkematut pakkumist. Lõpuks, kaalutlus tuleb viia tasakaalu: kas iga-aastased päringud seavad ohtu isikuandmete kaitse mõõdukuse põhimõtte ja kas täiendav kaitse varaliste riskide vastu õigustab sellist ulatuslikku andmete töötlemist. Kui andmete täpsust ei kontrollita just tehingu hetkel, võib ülemäärase kontrolli läbi viimine olla ebaefektiivne ja liigne. Rahvusraamatukogu töötleb täisealiste piiratud teovõimega isikute eestkostja andmeid avaliku ülesande täitmiseks, milleks on teavikute kättesaadavaks tegemine. Kuna andmete töötlemine toimub avaliku 54 Lõpparuanne ülesande raames, ei ole vajalik küsida isikute nõusolekut nende andmete töötlemiseks. Nagu ka alaealise lugeja ja tema seadusliku esindaja isikuandmete puhul ei ole ka rahvaraamatukogu täisealise lugeja ja tema eestkostja isikuandmete töötlemiseks kehtivas õigusraamistikus õiguslikku alust andvat sätet. Kui Rahvaraamatukogu seaduse muudatus võetakse vastu 8. mai 2025 eelnõus esitatud kujul, saab RaRa saab toetuda §-le 75 ERRS kui õiguslikule alusele. Proportsionaalsuse kontrolli teostamisel andmete säilitamise ja iga-aastaste korduspäringute osas tuleb hinnata, kas need tegevused on tõepoolest vajalikud avalikus huvis oleva ülesande täitmiseks. Arvestades, et täisealise isiku eestkostja andmete säilitamist otseselt seadusega nõutud ei ole, on võimalik tugineda 6(1)(e) artiklile, mis käsitleb andmete töötlemist avalikus huvis oleva ülesande täitmiseks. Andmete säilitamine võib olla põhjendatud tehingu kehtivuse tõendamiseks või muude seadusest tulenevate kohustuste täitmiseks. Näiteks võib andmeid vaja minna hilisemate vaidluste lahendamiseks või tõendamaks, et esindussuhe oli tehingu hetkel kehtiv. Siiski peab säilitamisaeg olema piiratud vaid sellega, mis on vajalik nende eesmärkide saavutamiseks, vältides liigset andmete kogumise perioodi. Iga-aastaste korduspäringute osas tuleb analüüsida, kas selline kontroll on tõesti vajalik, et tagada raamatukogu teenuse osutamine ja seotud varaliste riskide juhtimine. Kui perioodiline kontroll ei mõjuta otseselt tehingu kehtivust ega paranda teenuse kvaliteeti, võib selline tegevus olla ebaproportsionaalne. Massiliste ja sagedaste päringute läbiviimine ilma selge vajaduseta võib ülemääraselt sekkuda isikuandmete kaitse õigusesse. Kokkuvõttes peab proportsionaalsuse põhimõtte rakendamine tasakaalustama andmete säilitamise ja korduspäringute kasulikkust avaliku huvi ülesande täitmise kontekstis, tagades, et isikuandmete töötlemine toimub viisil, mis ei ületa vajalikku varalise riski maandamise ulatust ja on kooskõlas andmekaitse põhimõtetega. Oluline on täpsustada seaduslikku alusraamistikku, täiendades ERRS § 7 ning Rahvaraamatukogu seaduse muudatuste kavandatavat §75 juhiseid konkreetsete situatsioonide ja andmetöötluse tingimuste kohta, et vältida vigade ja subjektiivsuse mõju, samuti tagada teenuse kvaliteet. Raamatukoguteenuste kasutaja surma korral teenuste lõpetamine Raamatukogu poolt Isikuandmete kaitse seaduse kohaselt kehtib isiku nõusolek tema eluajal ja 10 aastat pärast surma, alaealise puhul 20 aastat, kuid teatud andmete, nagu isiku nimi ja surma fakt, töötlemisel ei ole vaja eraldi õiguslikku alust. Raamatukoguteenuse kontekstis tähendab see, et kasutaja nime ja surma fakti töötlemine Rahvastikuregistrisse päringu tegemiseks on lubatud, ilma et oleks vajadus eraldi õigusliku aluse tuvastamiseks. Proportsionaalsuse hinnang surma fakti perioodiliste päringute osas eeldab nende sageduse ja ulatuse põhjendamist, lähtudes teenuse järjepidevuse tagamise vajadusest. Sage ja massiline kontroll võib olla liigne, kui see ei ole konkreetsete põhjuste, näiteks teenuse aastase uuendamise, alusel. Päringud võiksid keskenduda aktiivsetele kasutajatele, kellel on kehtivad lepingulised kohustused ja õigused. Kokkuvõttes tuleks päringute tegemisel tagada, et andmete töötlemine ei ületaks vajalikku mahtu ja vältida tehinguväliste, massiliste päringute ülemäärast sekkumist. 55 Lõpparuanne Kasutajatele teadete saatmine Lisaks eelnevale teenusele soovib RaRa saata kasutajatele teateid, mille õiguslik alus tuleb tuvastada eraldiseisvalt. Siinkohal tuleb eristada kahte sorti teateid: • põhiteenuse teated (nt laenutähtaegade meeldetuletused); ja • teated personaalse ja/või proaktiivse sisuga (nt personaalsed teavikute soovitused või sihtrühmapõhised lugemissoovitused). RaRa saadab kasutajatele kahte tüüpi teateid: põhiteenuse teated (nt laenutähtaegade meeldetuletused) ja personaalsed/proaktiivsed teated (nt lugemissoovitused). Põhiteenuste teadete jaoks on sobivaks õiguslikuks aluseks lepingu täitmine, kuna selliste teadete saatmine on vajalik lepinguliste kohustuste täitmiseks. Personaalse ja proaktiivse sisuga teadete saadetiste jaoks on nõusolek sobiv õiguslik alus, kui see on vabatahtlik ja konkreetne, kuna muud tavalised alused, nagu seadusjärgne kohustus või avalikes huvides olev ülesanne, ei ole siinkohal rakendatavad. Kokkuvõtteks Isikuandmete töötlemise peamine õiguslik alus on avaliku ülesande täitmine RaRa seadusjärgsete ülesannete raames. Kui andmeid ei saa töödelda muul alusel, kasutatakse kasutaja nõusolekut. Joonis 8 on välja toodud kokkuvõtlikult RaRa teenuste kasutajad ja nende õiguslikud alused. Soodustusega kasutajate puhul on aluseks autoriõiguse seadus, mis võimaldab ligipääsu kaitstud teostele ilma autori loata. Haridussüsteemi kasutajate puhul kasutatakse EHIS-e ja TÖR-i andmeid nende kuuluvuse tuvastamiseks. Lepingu täitmine on sobilik õiguslik alus, kuna see tagab eesmärgipärasuse ja andmete minimaalsuse. RaRa teenuste osutamiseks on vajalik isikusamasuse kontroll ning piiratud teovõimega isikute puhul ka seadusliku esindaja tuvastamine. Alla 18-aastane isik võib teha tehingu seadusliku esindaja nõusolekul või heakskiiduga. Eesti Rahvusraamatukogu seadus annab RaRa-le aluse nii alaealise lugeja kui ka seadusliku esindaja isikuandmete töötlemiseks. 56 Lõpparuanne Joonis 8. Õiguslikud alused isikuandmete töötlemiseks Detailsem õigusanalüüs on leitav Lisa 4. Detailne õigusanalüüs. 57 Lõpparuanne 3.5. Tuleviku raamatukoguteenuste IT arhitektuuriline visioon Ühtne üleriigiline raamatukogude süsteem (ÜÜRS) koosneb kahest komponendist: raamatukogusüsteemi tarkvarast ja e-kataloogist (vt Joonis 9). ÜÜRS on liidestatud teiste raamatukogusüsteemidega, näiteks URRAM, SIERRA ja RIKS. ÜÜRS-i komponent e-Kataloog kasutab kaheastmelist autentimist ja olemasolevat Single Sign-On (SSO) rakendust, mis on liidestatud riigi poolt pakutud autentimislahendustega, näiteks Eesti haridus- ja teadusasutuste vahelise autentimise ja autoriseerimise taristu (TAAT), HarID ja Riigi autentimisteenus (TARA). E-kataloog oma funktsionaalsuse tagamiseks on liidestatud järgmiste riigi poolt pakutud X-tee teenuste ja infosüsteemidega: Tervise Infosüsteem (TIS), Sotsiaalkaitse Infosüsteem (SKAIS2), Töötamise register (TÖR), Eesti Hariduse Infosüsteem (EHIS), Rahvastikuregister (RR), Andmejälgija ja Nõusolekuteenus. Nende teenuste vahendusel on võimalik süsteemil saada informatsiooni raamatukogu kasutaja kohta, näiteks: kas isik on nägemispuudega, tema eestkostja informatsioon, isiku poolt edastatud aadressiandmete valiidsus, samuti informatsioon selle kohta, kas raamatukogu kasutaja on õpetaja/õppejõud. Samuti omavad funktsionaalsuse tagamiseks tähtsust liidestused järgmiste väliste teenustega: raamatukogude juhtimistöölaud, iseteeninduskiosk, raamatute tagastusautomaat, maksekeskus, postipaki teenus, avaandmete teenus ning VIAF. Lisaks eelnevale on olemas ka liidestused raamatupidamissüsteemiga, dokumendihaldussüsteemiga (DHS) ning e-posti ja SMS saatmise teenustega. Mitmed süsteemiga liidestatud komponendid, näiteks SSO ja E-kataloog, on tarnitud avalikku pilve, täpsemini Microsoft Azure pilve78. 78 Microsoft riskianalüüsi1 lisa, Microsoft Azure [Link] 58 Lõpparuanne Joonis 9. RaRa raamatukogude infosüsteemi arhitektuur Riigi registritesse tehtavate päringute osas on hinnatud riigi poolt pakutavate standardkomponentide ehk andmejälgija ja nõusolekuteenuse rakendusvõimalusi. Andmejälgija on mõeldud nii riigi andmekogude sisese kui ka nende vahelise andmevahetuse logimiseks (X-tee liiklus). Andmejälgija juurutamise eeldus on X-tee versiooni 6 kasutamine. Erasektori teenusepakkujatega (nt makselahendus, logistikateenus) ei toimu andmevahetus üle X-tee. Seesugust andmevahetust peab logima e-kataloogi siseselt. Kuna ÜÜRSi komponent raamatukogusüsteem on eeldatavasti “karbitoode”, siis on andmejälgija kasutuselevõtt tõenäoliselt ebamõistlikult keerukas ja kallis. Andmejälgija liidestamine teise ÜÜRS-i komponendi, e-Kataloogiga, on teostatav. Isikuandmete kaitse üldmääruse (GDPR) kontekstis on oluline, et vähemalt süsteemi siseselt toimuks isikuandmete töötlemist puudutavate toimingute logimine. Seetõttu tuleks eelkõige tagada isikuandmete töötlemise logimine süsteemi poolt ning andmejälgija 59 Lõpparuanne rakendamine võib olla hilisem prioriteet. Süsteemi vaates tuleb andmejälgija kasutuselevõttu kaaluda juhul, kui süsteemis talletatud isikuandmeid hakkab üle liideste kasutama mõni muu kolmanda osapoole süsteem. Nõusolekuteenuse abil saab inimene anda riigile loa jagada oma isikuandmeid kindla teenusepakkujaga. Teenus on eelkõige mõeldud olukorra lahendamiseks, kus inimene soovib riigi poolt tema kohta kogutud andmeid jagada mõne (era)ettevõttega. ÜÜRS-i kasutaja alustab süsteemi kasutamist, sisenedes E-kataloogi ning autentides end riigi autentimisteenuse vahendusel. Autentimisteenus kasutab TARA teenust. Võimalikeks autentimisvahenditeks on Euroopa Liidu liikmesriigi eID, ID-kaart, Smart-ID ja Mobiil-ID, millest kõik peale esimese eeldavad Eesti isikukoodi olemasolu. Eduka autentimise tulemusel tagastatakse ÜÜRS-ile kasutaja Eesti isikukood ning kasutaja saab hakata kasutama raamatukogu teenuseid. Uue kasutaja loomine ja olemasoleva kasutaja andmete uuendamine ÜÜRS-is algab kasutaja autentimisest autentimisteenuse vahendusel. Protsess jätkub taotluse täitmise alustamisega kasutaja poolt. Järgmisena, juhul kui kasutaja on alaealine, tehakse päring Rahvastikuregistrisse, selgitamaks välja kasutaja lapsevanema või eestkostja andmed. Järgmise sammuna uue kasutaja loomise protsessis saab kasutaja teavituse, et soodustusele kvalifitseerumiseks või andmete uuendamiseks, on vajalik tema nõusolek tema kohta lisaandmete pärimiseks. Juhul kui kasutaja keeldub nõusoleku andmisest, jätkub protsess kasutaja poolt eriõigust tõendava dokumendi üleslaadimisega, mida asub käsitsi menetlema raamatukogu töötaja. Juhul kui dokument vastab nõuetele, määrab raamatukogu töötaja eriõiguse kasutajakontole kehtivusajaga ja kasutaja saab teavituse, et soodustusega kasutaja on loodud, vastasel juhul erisoodustust ei rakendata ja kasutaja saab vastava teate. Kui kasutaja keeldub nõusoleku andmisest tema kohta lisaandmete pärimiseks kasutaja andmete uuendamise protsessis, uuendab kasutaja ise oma andmed ja saab teavituse, et andmed on uuendatud. Juhul kui kasutaja annab oma nõusoleku, edastatakse see Nõusolekuteenusele. Protsess jätkub isiku eriõiguse aluseks olevate andmete andmepäringuga Tervise Infosüsteemist ning SKAIS2-st. Protsess lõpeb soodustatud kasutaja loomisega või kasutaja andmete uuendamisega ja kasutajale vastava teavituse edastamisega (Joonis 10). 60 Lõpparuanne Joonis 10. Uue kasutaja loomine/kasutaja andmete uuendamise jadaskeem Väljaannete laenutamisega seonduv protsess ÜÜRS-is algab kasutaja autentimisest E-kataloogis SSO vahendusel. Protsess jätkub väljaannete valimisega ja laenutuskorvi lisamisega. Järgmisena kinnitatakse valik kasutaja poolt. E-kataloogi rakendus teostab kontrolli, selgitamaks välja, kas kasutajale rakendub eritingimusi, nt vanusest tulenev eestkoste kontroll või laenutuspiiranguga väljaannete valikust tulenev sihtrühma kuuluvuse kontroll. Kui kontrolli tulemusena selgub, et kasutajale eritingimusi ei rakendu, vormistatakse pakiautomaat või kuller ja kasutajale saadetakse teavitus tellimuse sooritamise kohta. Juhul kui valitud väljaandel on laenutuspiirang, saab kasutaja teavituse, et eritingimuste kontrolliks on vajalik tema nõusolek tema kohta lisaandmete pärimiseks. Juhul kui kasutaja keeldub nõusoleku andmisest, protsess katkeb. Juhul kui kasutaja annab oma nõusoleku, edastatakse see Nõusolekuteenusele. Protsess jätkub isiku töösuhte andmepäringuga TÖR-ist ning haridustöötaja töösuhte päringuga EHIS-est. Järgmise sammuna täidab kasutaja makseandmete ja pakiautomaadi vormi. Seejärel leiab aset makse kinnitamine ja kasutaja makse- ja pakiautomaadi andmete logimine. Protsess jätkub logiandmete edastamisega Andmejälgija teenusele, seejärel pakiautomaadi andmete edastamisega Postipakiteenusele ning makseandmete edastamisega Maksekeskusele. Protsess lõpeb tellimuse kinnitamisega ja kasutajale teavituse edastamisega tellimuse sooritamise kohta (Joonis 11). 61 Lõpparuanne Joonis 11. Laenutamise jadaskeem Andmevahetus Süsteemi arendusfaasis on tarvis luua ühesuunalised ühendused. Andmevahetus riigi infosüsteemi kuuluvate andmekogudega toimub läbi riigi infosüsteemi andmevahetuskihi (X-tee), kus see võimalus juba loodud on. Andmete ühepoolne päring toimub mitmetest riiklikest registritest, vajalikud ühendused lepitakse kokku enne arendust. Turvalisus Kogu andmeliiklus süsteemi erinevate komponentide vahel toimub X-tee vahendusel79 üle HTTPS protokolli. Kasutusele tuleb võtta e-Kataloogi jaoks loodud turvasertifikaat ning seadistada e-Kataloog X- tee teenusena, mis suhtleb üle HTTPS protokolli.80 Turvasertifikaat tuleb lisada turvaserverisse. Kasutaja autentimiseks kasutatakse riigi autentimisteenust (TARA). Süsteemi mugavamaks kasutamiseks on soovituslik liidestuda ka riikliku SSO (GovSSO, riiklik Single Sign-On) teenusega ning lähtuda SLO (Single Logout) vajadustest. Kasutajate autoriseerimiseks kasutada OAuth 2.0 autoriseerimise raamistikku ja OpenID Connect'i (OIDC). OAuth 2.0 puhul edastatakse komponentide vahel JWT tokenit. 79 E-riigi ristfunktsionaalsed nõuded [Link] 80 X-tee: Eesti keskkonna dokumentatsioon [Link] 62 Lõpparuanne Süsteemis peavad olema realiseeritud sisemised rollid koos privileegidega. Kasutaja tegevus on piiratud talle omistatud rolli ja sellega seonduvate privileegidega. Kasutaja siseneb süsteemi autentimislahenduse vahendusel, mis autendib kasutaja. Kui kasutaja siseneb süsteemi kasutajaliidese kaudu, jõuab kasutajaga seotud informatsioon Kasutajate halduse rakenduseni, mis kontrollib andmebaasist, kas selline kasutaja on loodud, milline roll on talle määratud ning kas rollil on ligipääs kasutajaliidesele ja selles kuvatud spetsiifilisele vaatele. Kui ligipääs on olemas, kuvatakse kasutajale kasutajaliidese vastav vaade, vastasel juhul kuvatakse kasutajale veateade. Süsteemis tuleb tagada turvalisuse vastavus OWASP ASVS 3.0 tasemele 1 või uuemale testimise metoodikale ning järgida OWASP 2017 ja uuemaid Top Ten lahendusi ning soovitusi. Samuti on vajalik teostada turvatestimine eraldi sõltumatu turvatestimise teenust pakkuva ettevõtte vahendusel. Lisaks eelnevale peab olema tagatud tekkinud vigade logimine ja vigadest kasutajate, sh administraatorite teavitamine. Arendusjuhised ja tehnoloogiavalikud Tehnoloogiate ja raamistike valikul on soovituslik piirduda vabavaraliste tehnoloogiate ja raamistikega ning lähtuda pilvepõhisusest (nn cloud native lähenemine - loodavad rakendused peavad olema konteineriseeritavad ja võimalik jooksutada pilveplatvormidel). Süsteem on soovituslik realiseerida selliselt, et loodavad komponendid koosneksid Java tehnoloogial ja Spring Boot raamistikku kasutavast API kihist, mis pakub kasutamiseks REST liideseid ning kasutajaliidesest. Süsteem võiks kasutada relatsioonilist andmebaasi, eelistatult PostgreSQL. On soovituslik kasutada Apache Tomcat või Nginx rakendusserverit. Kasutada ka jälgimissüsteemi Zabbix, mis jälgib põhiliselt infrastruktuuri. Samuti sisaldab komponent /health otspunkti, mille poolt jagatud info alusel jälgib Zabbix teenuse olekut – kas teenus on töökorras või mitte. Samuti on selle otspunkti kaudu võimalik saada infot komponendi versiooni ja ehitamise aja osas. Mittefunktsionaalsed nõuded ÜÜRS-i arendamisel tuleb aluseks võtta mittefunktsionaalsed nõuded, mis puudutavad vastavust seadusandlusele ja standarditele, arhitektuuri, turvalisust, lähtekoodi, andmebaasi, logimist ja monitooringut, kasutajaliidest, testimist, dokumentatsiooni ja tehnoloogilist profiili (vt Lisa 2. RaRa mittefunktsionaalsed nõuded ja Lisa 3. RaRa tehnoloogiline profiil). Logimine ja logide analüüs Kogu rakenduse andmeliiklus, sh veateated ja süsteemi konfiguratsiooni muudatused jms logitakse avaliku pilve Elastic Search-i. Logide analüüsimiseks on võimalik Elastic Search integreerida nii Kibana logide analüüsimise kui ka Grafana hoiatuste tegemise või mõõdikute visualiseerimisega. Vajalikud arendused ja liidestused 63 Lõpparuanne Lisaks erinevate riiklike asutuste poolt pakutavate teenustega liidestamisele on veel mõned liidestused, mis on vajalikud e-Kataloogi arendamisel. Need on esitatud allolevas tabelis Tabel 10. Liidestus Kirjeldus GovSSO Süsteemi mugavaks toimimiseks on vajalik, et kõik e-Kataloogiga seotud keskkonnad liidestuksid GovSSO-ga, et ei oleks vajadust keskkondadesse sisenemisel uuesti sisse logida. X-tee liidestus E-Kataloog tuleb liidestada riigi infosüsteemi andmevahetuskihiga (X-tee) ehk seadistada vastavas X-tee turvaserveris (Joonis xx) teenusena ning lisada turvaserverisse rakenduse turvasertifikaat. Tabel 10. Liidestused ja nende kirjeldused SSO ehk ühtne sisselogimine on vajalik süsteemi mugavamaks kasutamiseks, võimaldades süsteemi kasutajal liikuda süsteemi erinevate keskkondade vahel ilma igakordselt sisse logimata. E-kataloog on tarvis liidestada riigi andmevahetuskihiga (X-tee), kuna on nõue, et kõik Eesti riigi digiteenused suhtleksid omavahel turvaliselt riigi andmevahetuskihi vahendusel. 64 Lõpparuanne 3.6. Tulevikukontseptsiooni tegevuskava Peatükk annab ülevaate ÜÜRS-i tulevikukontseptsiooni juurutamiseks vajalikest töödest koos ajaraami, seotud osapoolte ja vastutajate ning hinnangulise arendusmahuga kuudes. Tabel 11 on kirjeldatud süsteemi juurutamiseks vajalikud arendustööd (nr 1-8), mis hõlmavad raamatukogusüsteemi arendamist ning päringuid teistesse süsteemidesse üle X-tee ning muud juurutamist toetavad tööd (nr 9-10). Seotud osapool / Töö Töö kirjeldus vastutaja 1. Andmebaasi uute tabelite loomine ja ÜÜRS andmebaasi uute tabelite loomine ja olemasolevatesse RARA olemasolevate täiendused vajalike täienduste/muudatuste sisseviimine 2. ÜÜRS rakenduse arendus ÜÜRS rakenduse REST liidesed ja kogu äriloogika RARA 2.1. Arendustööd seoses töövõime ÜÜRS rakenduses tehtavad arendused seoses TIS terviseandmete RARA päringuga pärimise teenuse liidestusega 2.2. Arendustööd seoses töötamise ÜÜRS rakenduses tehtavad arendused seoses TÖR isiku RARA päringuga töötamise pärimise teenuse liidestusega 2.3. Arendustööd seoses puude ÜÜRS rakenduses tehtavad arendused seoses SKAIS2 puude RARA tuvastamise päringuga tuvastamise teenuse liidestusega 2.4. Arendustööd seoses haridustöötaja ÜÜRS rakenduses tehtavad arendused seoses EHIS RARA töösuhte päringuga haridustöötaja töösuhte pärimise teenuse liidestusega 2.5. Arendustööd seoses õppuri ÜÜRS rakenduses tehtavad arendused seoses EHIS õppuri RARA päringuga pärimise teenuse liidestusega 2.6. Arendustööd seoses lapsevanema / ÜÜRS rakenduses tehtavad arendused seoses RR lapsevanema / RARA eestkostja päringuga eestkostja pärimise teenuse liidestusega 2.7. Arendustööd seoses surma fakti ÜÜRS rakenduses tehtavad arendused seoses RR surma fakti RARA päringuga pärimise teenuse liidestusega 3. ÜÜRS kasutajaliideses uute vaadete ÜÜRS haldamise, lugejate ja töötajate vaadete loomine ja RARA loomine ja olemasolevate täiendamine olemasolevate vaadete täiendamine 4. Päringud teistesse süsteemidesse üle Päringud RRi, TÖRi, TISi, EHISesse, SKAIS2 ja seotud arendus RARA X-tee ÜÜRSis 4.1. Töövõme päring TISs Päring TISis isiku diagnoosi välja selgitamiseks TEHIK 4.2. Töötamise päring TÖRs Päring isiku töötamise osas, välja selgitamaks tööandja asutuse, EMTA töökoormuse jms informatsioon. 4.3. Puude tuvastamise päring SKAIS2s Päring isiku puude tuvastamiseks soodustuste saamiseks SKA 4.4. Haridustöötaja töösuhte päring Päring haridussüsteemi töötaja seose välja selgitamiseks EHIS EHISst haridusasutustega 4.5. Õppuri päring EHISst Päring õppuri kuuluvuse seose haridusasutusega välja EHIS selgitamiseks 4.6. Lapsevanema/eestkostja päring Päring välja selgitamaks isiku lapsevanema/eestkostja RR RRst informatsiooni 4.7. Surma fakti päring RRst Päring välja selgitamaks, kas isik on elus RR 5. ÜÜRS liidestamine GovSSOga ÜÜRSi liidestamine GOVSSO teenusega RARA 6. ÜÜRS liidestamine Andmejälgijaga ÜÜRSi liidetamine Andmejälgija teenusega RARA 7. ÜÜRS liidestamine Nõusolekuteenusega ÜÜRSi liidetamine RIA Nõusolekuteenusega RARA 8. ÜÜRS liidestamine riigi ÜÜRSi seadistamine X-tee teenusena riigi RARA andmevahetuskihiga infosüsteemi andmevahetuskihi turvaserveris 9. Turvatestid Viia läbi ÜÜRSi puudutav turvatestimine RARA 10. Tehnilise dokumentatsiooni ja ÜÜRSi tehnilise dokumentatsiooni ja kasutusjuhendite loomine RARA kasutusjuhendite loomine Tabel 11. Tulevikukontseptsiooni arenduste nimekiri 65 Lõpparuanne Tabelis 11 kirjeldatud töödest on võimalik koheselt alustada töödega 1-3, kuid need on sõltuvuses päringutest teistesse süsteemidesse üle X-tee, seega neid ei saa täielikult enne lõpetada kui tööd 4.1 - 4.7 on samuti valminud. Tööd 5-8 ei ole X-tee päringutest sõltuvuses, seega neid on võimalik teostada ka varem. Turvatestid ja dokumentatsiooni ning juhendite koostamine (tööd 9-10) sooritatakse süsteemi valmimisel. Soovitame tööd jagada kahte etappi ning selgitatud järgnevalt: I. Etapi fookus on rakenduse MVP realiseerimisel ning etapi tähtaeg 2026. aasta sügis. Oluline osa MVP realiseerimise töödest on seotud ÜÜRS rakenduse ja kasutajaliidese väljaarendamisega. MVP raames teevad päringutega seotud arendustöid EHIS ja RR, et võimaldada pärida haridustöötaja töösuhte ja õppuri informatsiooni ning lapsevanema/eestkostja ning surma fakti. Lisaks eelnevale on fookuses ÜÜRS liidestamine Andmejälgija ja Nõusolekuteenusega ja GovSSO ning riigi andmevahetuskihiga. II. Etapi fookus on ÜÜRS rakenduse ja kasutajaliidese arenduste lõpetamine, muuhulgas teevad ka päringutega seotud arendustöid TEHIK, EMTA ja SKA, et võimaldada pärida informatsiooni isiku tervisliku seisundi, töötamise ning puude osas. Tööde lõpetamisele järgnevad turvatestid ja tehnilise dokumentatsiooni ning kasutusjuhendite koostamine. Arenduste teekaart on välja toodud Lisa 5. RaRa arendustööd ja maksumused. 66 Lõpparuanne 3.7. Tulevikukontseptsiooni teenuste arenduste võimalik maksumus Teenuste arenduste võimaliku maksumuse hindamiseks on kaardistatud arendustööd, mida teostab RaRa ning teised seotud asutused, kellelt eeldatakse vajalike liidestuste ja funktsionaalsuste arendamist. Hindamine tugineb metoodikale, kus töömahtu on esmalt hinnatud inimkuudes (ühik kirjeldamaks aega, mis kulub töö teostamiseks ühel arendajal), seejärel täpsust suurendades ja hinnates tööde teostamiseks kuluvat aega ka töötundides. Arendustööde hinnastamisel on kasutatud arvestuslikku töötunni maksumust 80 eurot, millele lisandub käibemaks. Arendustööde kogumahuks on arvestatud hinnanguliselt 41 inimkuud ehk 6 560 töötundi ning kogumaksumuseks 524 800 eurot, millele lisandub käibemaks. Kuna hinnastamine on tehtud 2025. aasta seisuga, tuleb hilisemal teostamisel (nt 2026-2027) arvestada ka tarbijahinnaindeksi (THI) kasvu. Vastavalt Rahandusministeeriumi prognoosile on THI kasvuks hinnatud 3,5% aastal 2026 ja 2,4% aastal 2027. Sellest lähtuvalt peab arvestama 2026. aastal arendustööde maksumuseks orienteeruvalt 673 528 eurot ja 2027. aastal 689 693 eurot koos KM-ga. Joonis 12 on välja toodud arendustööde maksumus asutuste lõikes. Joonis 12. Arendustööde hinnanguline maksumus asutuste lõikes Tulevikukontseptsiooni teenuste arenduste võimalik maksumus detailsemalt ja töö teostamise teekaart on välja toodud Lisa 5. RaRa arendustööd ja maksumused. 67 Lõpparuanne Lisad Lisa 1. Läbiviidud intervjuud ja kohtumised Kuupäev Tegevus Kaasatud osapooled 04.06.2025 Eelkohtumine tellijaga Anneli Nappus 11.06.2025 Avakohtumine projektirühmaga Anneli Nappus, Urmas Sinisalu, Heleen Karja, Marianne Meiorg, Anett Pärismaa, Hannes Uik 16.06.2025 RaRa IT-süsteemide tutvustamise kohtumine Anneli Nappus, Hannes Uik, Urmas Sinisalu 16.06.2025 RaRa teenuste tutvustamise ja juurdepääsu süsteemi Anneli Nappus, Heleen Karja, Urmas kohtumine Sinisalu, Anett Pärismaa 18.06.2025 Materjalide ülevaatamise kohtumine Anneli Nappus 19.06.2025 Kohtumine pimedate raamatukogu esindajaga Anneli Nappus, Heleen Karja, Marja Kivihall 26.06.2025 RaRa seadusandluse ja piirangute tutvustamise kohtumine Marianne Meiorg, Anneli Nappus 03.07.2025 Projektirühma kohtumine Anneli Nappus, Urmas Sinisalu, Heleen Karja, Marianne Meiorg, Hannes Uik 17.07.2025 Projektirühma kohtumine Anneli Nappus, Hannes Uik, Urmas Sinisalu, Heleen Karja 29.07.2025 RaRa süsteeminõuded arhitektuurilise lahenduse vaatest Hannes Uik 31.07.2025 Projektirühma kohtumine Anneli Nappus, Hannes Uik 06.08.2025 Kohtumine Maksu- ja Tolliameti esindajaga teemal TÖR Katre Roosilill, Madis Laas, Janek Rozov päringud RaRa teenuse pakkumisel (MTA), Anneli Nappus (RaRa) 13.08.2025 Projektirühma kohtumine Anneli Nappus, Urmas Sinisalu, Hannes Uik 19.08.2025 Kohtumine Haridus- ja Teadusministeeriumi esindajaga teemal Margus Kärner (HTM), Anneli Nappus EHIS päringud RaRa teenuse pakkumisel (RaRa) 21.08.2025 Liidestuste ülevaade ja mittefunktsionaalsete nõuete arutelu Urmas Sinisalu, Hannes Uik, Anneli Nappus 29.08.2025 Aruande arutelu MIRKO täpsustused Anneli Nappus, Heleen Karja 03.09.2025 Kohtumine Sotsiaalkindlustusameti esindajatega teemal Kristina Pähkel, Kalev Hark, Uljana SKAIS-i võimalikud liidestumised Gussarova, Tatjana Portnova (SKA) 09.09.2025 Projektirühma kohtumine Anneli Nappus, Marianne Meiorg 25.09.2025 Projektirühma kohtumine Anneli Nappus, Urmas Sinisalu, Hannes Uik, Heleen Karja 15.10.2025 IT arhitektuuri joonise ülevaatamine ja täiendamine Hannes Uik 24.10.2025 Kasutajateekondade jooniste ülevaatamine ja täiendamine Anneli Nappus, Marianne Meiorg, Hannes Uik Tabel 12. Läbiviidud intervjuud ja kohtumised 68 Lõpparuanne Lisa 2. RaRa mittefunktsionaalsed nõuded Esitatud eraldi failina. Lisa 3. RaRa tehnoloogiline profiil Esitatud eraldi failina. Lisa 4. Detailne õigusanalüüs Esitatud eraldi failina. Lisa 5. RaRa arendustööd ja maksumused Esitatud eraldi failina. 69 Lõpparuanne www.pwc.ee © 2025 AS PricewaterhouseCoopers Advisors. Kõik autoriõigused kaitstud. “PwC” viitab Eesti seaduste alusel asutatud ja tegutsevale äriühingule AS PricewaterhouseCoopers Advisors või kontekstist lähtuvalt teistele PricewaterhouseCoopers International Limited rahvusvahelise võrgustiku liikmetele, kellest igaüks on eraldiseisev ja sõltumatu juriidiline isik. AS PricewaterhouseCoopers Advisors, Tatari 1, 10116 Tallinn, t 614 1800, [email protected] RAHVUSRAAMATUKOGU RAAMATUKOGUDE MITTEFUNKTSIONAALSED NÕUDED 2025-1 ÜLDNÕUDED Dokument ja selle lisad määratlevad mittefunktsionaalsed nõuded Rahvusraamatukogu (RaRa) raamatukogude uutele infosüsteemidele ja nendega seotud dokumentatsioonile. Nõuded on kohustuslikud ka olemasolevate infosüsteemide lisaarendustele ja versiooniuuendustele mahus, mis on lisaarenduse ja versiooniuuenduste käigus võimalik. Nõuded on kohustuslikuks täitmiseks kõikidele tulemitele. Alternatiivsete, käesolevas mittefunktsionaalsete nõuete dokumendis puuduvate tehnoloogiate, vahendite ja metoodikate valikul rakendab hankija järgnevaid kriteeriume: sobivus olemasoleva infrastruktuuriga, platvormi tehnoloogilised omadused, kompetentsi olemasolu ja kättesaadavus tööjõuturul. Kui mõnda konkreetselt kohalduvat nõuet ei ole pakkuja arvates võimalik või otstarbekas täita, tuleb selle mittetäitmise fakt ja põhjendus pakkumuses välja tuua. Kõik erikokkulepped fikseeritakse tellijaga kirjalikku taasesitamist võimaldaval viisil. NÕUDE KIRJELDUS MÄRKUS Vastavus standarditele ja seadusandlusele Lahendus peab vastama „Eesti avaliku teabe masinloetava Dokument on leitav: https://www.aki.ee/sites/default/files/documents/2024- avalikustamise roheline raamat“ sõnastatud põhimõtetele ja 03/avaliku-teabe-masinloetava-avalikustamise-roheline-raamat-20141125.odt nõuetele. Lahendus peab vastama „Aadressiandmete süsteem“ määruses Määrus on leitav https://www.riigiteataja.ee/akt/103122022011?leiaKehtiv kehtestatud aadressiandmete nõuetele Lahenduses tuleb tegevusalade määramiseks kasutada Eesti Klassifikaator on leitav: Majanduse Tegevusalade Klassifikaatorit (EMTAK 2025). https://emtak.rik.ee/EMTAK/block/resource/MTU5MjQ4NzE5Nw==/EMTAK_20 25.pdf Lahendus peab vastama „Avaliku teabe seaduses“ kehtestatud teabe Seadus on leitav: https://www.riigiteataja.ee/akt/114032011019?leiaKehtiv avalikustamise ja juurdepääsu võimaldamise nõuetele. Lahendus peab vastama „Riigi infosüsteemi haldussüsteem“ Määrus on leitav: https://www.riigiteataja.ee/akt/12933746?leiaKehtiv (edaspidi RIHA) esitatud nõuetele ja reeglitele. Lahendus peab vastama “Võrgu- ja infosüsteemide küberturvalisuse Määrus on leitav: https://www.riigiteataja.ee/akt/113122022030?leiaKehtiv. Täpne nõuded“ määruses esitatud nõuete alusel määratud turbeastmele M, rakendamise ulatus lepitakse kokku lähtuvalt konkreetsest infosüsteemist. kui ei ole nõutud teisiti. Eesti infoturbestandard https://www.riigiteataja.ee/akt/121122022034?leiaKehtiv https://eits.ria.ee/ Isikuandmete kaitse üldmäärus ja direktiiv on leitavad: http://eur- Loodav lahendus peab vastama isikuandmete kaitse üldmäärusele ja lex.europa.eu/legal- direktiivile andmete edastamisel politseikoostöö ja õigusalase content/ET/TXT/HTML/?uri=CELEX:32016R0679&from=ET http://eur- koostöö valdkonnas sätetele. lex.europa.eu/legal- content/ET/TXT/?uri=CELEX:32016L0680 Lahenduses peavad X-tee teenused olema realiseeritud vastavalt Nõuded on leitavad: https://www.ria.ee/riigi-infosusteem/andmevahetuse- RIA kirjeldatud nõuetele. platvormid/andmevahetuskiht-x-tee Lahendus peab vastama "Infosüsteemide andmevahetuskiht" Määrus on leitav: https://www.riigiteataja.ee/akt/127092016004?leiaKehtiv määruses kirjeldatud põhimõtetele. Digiallkirjastamislahenduse kasutamisel kasutatakse riigi https://www.ria.ee/riigi-infosusteem/elektrooniline-identiteet-ja- allkirjastamisteenust. usaldusteenused/digiallkirja-serverteenused Kuupäeva ja aja (kuupäev, kellaaeg, ajaintervall) talletamisel teksti Põhimõtted on leitavad: https://en.wikipedia.org/wiki/ISO_8601 või kujul tuleb aluseks võtta ISO 8601 standardis kirjeldatud http://www.w3.org/TR/NOTE-datetime põhimõtted. Veebirakenduse kasutajaliides peab vastama vähemalt WCAG 2.1 Soovituste kogum on leitav: http://www.w3.org/TR/WCAG21 tasemele AA. Veebipõhine kasutajaliides peab ühilduma HTML ja CSS Standardiseerimata HTML ja CSS kasutamine peab olema eelnevalt tellijaga standarditega. kooskõlastatud. Arhitektuur Realiseeritud lahendus peab tellija poolt kinnitatud arhitektuurile vastavalt töötama tellija poolt nõutud funktsionaalsete ja mittefunktsionaalsete nõuete ulatuses. Arhitektuuri kirjeldus peab sisaldama C4 või analoogseid diagramme. https://c4model.com/ Diagrammid peavad kajastama süsteemi ülesehitust ja komponente, nende omavahelist suhtlust sealhulgas andmevooge. Kõik infosüsteemis kasutatavad komponendid peavad olema tuvastatavad, põhjendatud ja dokumenteeritud. Kõik lahenduses kasutatavad kolmanda osapoole komponendid (nt välised süsteemid, teegid) peavad olema tuvastatavad ja dokumenteeritud. Liidesed väliste süsteemidega peavad olema standardsed (allutatud sarnastele reeglitele) ja liidestamise detailid peavad olema dokumenteeritud. Lõppkasutaja peab saama jätkata rakenduse kasutamist ulatuses, mis on protsessiliselt võimalik. Rakenduse liidesed peavad olema tõrkekindlad. Süsteem peab tõrke korral võimalikult lühikese aja jooksul väljastama asjakohase veateate. Infosüsteemide platvormid (nt rakendusserver, andmebaas) ja Detailne infrastruktuur on kirjeldatud KuM haldusala tehnoloogilises profiilis. topoloogia peavad olema tellijaga kooskõlastatud enne reaalse tarkvaraarenduse algust. Kõik arendamisel kasutatud komponendid peavad vastuvõtmise hetkel olema viimased stabiilsed versioonid. Infosüsteemi ülesehituses peab kasutama kolmekihilist arhitektuuri: andmekiht, kontrollerkiht (äriloogika) ja esitluskiht. Infosüsteem peab olema üles ehitatud nii, et eessüsteemid (front- end) ja tagasüsteemid (back-end) on arhitektuuriliselt selgelt lahutatud. Liideste loomisel teiste süsteemidega ei tohi liidestuda otse eessüsteemist (front-end) vaid läbi rakenduse tagasüsteemi (back- end). Andmebaasid ja rakendused peavad kasutama UTF-8 kodeeringut ja UTC aega. Lahendused peavad olema projekteeritud laiendatavana ja edasi arendatavana. Komponendid peavad olema sõltumatud ja taaskasutatavad. Rakendust peab saama liigutada ilma ümberprogrammeerimiseta erinevate domeenide, domeenisaitide ja keskkondade vahel. Haldustoimingute tegemine otse andmebaasis peab olema viidud miinimumini. Rakendusel peab olema haldusliides. Peakasutajal peab olema selge ülevaade kasutajate õigustest. Kui rakendused saadavad e-kirju, siis peavad nad selleks kasutama välist e-posti serverit. Rakendus peab suutma kasutada keskkonnamuutujaid. Arhitektuur peab olema modulaarne, teenuste põhine. Ebaõnnestunud logimiste arvu peab saama piirata ajaühiku kohta. Muudatusi (logimiste arv, ajaühik) peab saama seadistada konfiguratsioonifailis. Klientrakendus ei tohi teostada otsepöördust andmebaasi poole. Peab kasutama rakendusserverit või adapterit. Rakenduse failid, mis ei tohi olla kasutajale nähtavad, peavad olema kaitstud (rakenduse kasutajale mittekättesaadavates) kaustades. Sorteerimisreeglistik peab vastama eesti tähestikule, tõstutundlikkus peab olema väljalülitatud. Lihtsamatele päringutele (nt ühe konkreetse andmeobjekti otsing) peab loodav lahendus vastama maksimaalselt 2 sekundi jooksul. Keerulisemate päringute (nt nimekirja filtreerimine) puhul on ajaline piirang 5 sekundit. Loodav lahendus peab võimaldama serveri poolt lõppkasutajale tagastatavate andmeobjektide arvu piirangut ja/või mahukate andmekomplektide lehekülgjaotust (pagination / positioned lazy loading). Kui rakenduse toimimiseks on vajalik autentimine, tuleb selleks https://www.ria.ee/riigi-infosusteem/elektrooniline-identiteet-ja- kasutada RIA TARA, vajadusel ka RIA GovSSO-d. usaldusteenused/kesksed-autentimisteenused https://e-gov.github.io/TARA-Doku/ Turvalisus, sh infoturve Välistele kasutajatele mõeldud rakendustes ei ole kasutajanime ja E-ITS parooliga autentimine lubatud. Veebirakenduste arendus CON.10.M1 Turvaline autentimine veebirakenduses Veebirakendused APP.3.1.M1 Veebirakenduste autentimine Rakenduse autentimise jõustamine peab toimuma serveri poolel. Veebirakenduste arendus CON.10.M1 Turvaline autentimine veebirakenduses Ebaõnnestunud autentimine peab lõppema viisil, mis ei jäta E-ITS Veebirakenduste arendus ründajale võimalust rakendusse sisse tungida ega tohi võimaldada CON.10.M10 Tundliku taustainfo avaldamise piiramine kasutajale ligipääsu süsteemi toimimise informatsioonile. Rakendus (sh konteineris käitatav) ei tohi töötamiseks vajada E-ITS Identiteedi- ja õiguste haldus juur(root)/administraatori õigusi. ORP.4.M2 Õiguste andmine, muutmine ja tühistamine Autentimist võimaldav informatsioon (nt autentimissaladused, API E-ITS võtmed, salasõnad) ei tohi sisalduda lähtekoodis. Tarkvaraarendus CON.8.M5 Turvaline süsteemi kavandamine Rakenduse kasutajale kuvatavad URL-id ei tohi sisaldada E-ITS Veebirakenduste arendus isikuandmeid. CON.10.M1 Turvaline autentimine veebirakenduses CON.10.M7 Konfidentsiaalsete andmete kaitse Rakendusel peab olema konfigureeritav kasutajaseansi aegumise E-ITS Veebirakenduste arendus CON.10.M3 Turvaline seansihaldus aeg. Süsteemist väljumine peab toimuma kasutajale üheselt arusaadaval ja E-ITS Veebirakenduste arendus CON.10.M3 Turvaline seansihaldus turvalisel viisil. Seansist väljumine toimub kahel viisil: kasutaja seansi lõpetab süsteem, sest seanss on olnud pikem kui süsteemile seadistatud vaikimisi ülempiir või kasutaja lõpetab seansi omal soovil. Süsteem peab teavitama kasutajat seansi lõppemisest. E-ITS Veebirakenduste arendus CON.10.M3 Turvaline seansihaldus Kasutajal peab olema igal süsteemi kasutamise ajahetkel võimalik E-ITS Veebirakenduste arendus CON.10.M3 Turvaline seansihaldus seanss omal soovil lõpetada. Iga eduka süsteemi sisselogimise (autentimise) korral tuleb alati E-ITS Veebirakenduste arendus CON.10.M3 Turvaline seansihaldus luua unikaalne seansi identifikaator (session ID) Seansi identifikaator ei tohi kajastuda ressursilokaatoris (URL-is), E-ITS Veebirakenduste arendus CON.10.M3 Turvaline seansihaldus veateadetes ega logides. Seansi identifikaator peab olema piisava pikkusega, juhuslik ja E-ITS Veebirakenduste arendus CON.10.M3 Turvaline seansihaldus unikaalne kogu aktiivse seansi jooksul. Rakendus ja selle komponendid peavad võimaldama keskkondade E-ITS Tarkvaraarendus lahusust (nt arendus-, test- ja toodangu keskkond). CON.8.M3 Sobiva tarkvaraarenduskeskkonna valimine CON.8.M7 Tarkvara testimine tarkvaraarenduse käigus Andmebaasis olevate rakenduste kontod peavad omama ainult E-ITS Identiteedi- ja õiguste haldus minimaalselt rakenduse tööks vajalikke õigusi. ORP.4.M2 Õiguste andmine, muutmine ja tühistamine Krüptoalgoritmide ja räsifunktsioonide kasutamisel tuleb järgida Uuring on leitav: https://ria.ee/amet-uudised-ja-kontakt/uudised- RIA veebilehel avaldatud krüptograafiliste algoritmide elutsükli pressikontakt/uuringud-ja-analuusid#kruptouuringud uuringu värskeimas versioonis toodud soovitusi ja põhimõtteid. Andmebaasi ja rakenduse vaheline suhtlus peab olema krüpteeritud E-ITS Tarkvaraarendus CON.8.M5 Turvaline süsteemi kavandamine kui suhtlus toimub üle avaliku võrgu. Veebirakendused APP.3.1.M14 Konfidentsiaalsete andmete kaitse Rakenduses peab olema tagatud võimekus välja vahetada aegunud Krüptoalgoritmide väljavahetamine peab olema dokumentatsioonis kirjeldatud. ja ebaturvalisi krüptoalgoritme. E-ITS Krüptokontseptsioon CON.1.M1 Krüptomehhanismide kasutuselevõtu kavandamine Kõik paroolid ja salasõnad peab rakendus salvestama kas räsituna E-ITS ja soolatuna või krüpteeritud kujul. Identiteedi- ja õiguste haldus ORP.4.M23 Nõuded paroole töötlevatele IT- süsteemidele Tarkvaraarendus CON.8.M5 Turvaline süsteemi kavandamine Veebirakenduste arendus CON.10.M7 Konfidentsiaalsete andmete kaitse Kõik võtmed ja salasõnad peavad olema asendatavad ning need E-ITS Identiteedi- ja õiguste haldus tuleb toodangu keskkonna installatsiooni ajal luua või asendada. ORP.4.M23 Nõuded paroole töötlevatele IT-süsteemidele Võrguliikluse krüpteerimiseks peab olema HTTPS valmidus. Veebirakenduste arendus CON.10.M7 Konfidentsiaalsete andmete kaitse Tarkvara iga versioon peab läbima koodikvaliteedikontrolli süsteemi SonarQube või samaväärse lähtekoodi analüüsi vahendiga nii, et pole Security, Blocker ja Critical tüüpi vigu. Tarkvara iga versioon peab olema kontrollitud Common https://cve.mitre.org/ Vulnerabilities and Exposures (CVE®) järgi ja ei tohi sisaldada teadaolevaid turvanõrkuseid. Rakendusse ja andmetele tohib olla ligipääs ainult dokumenteeritud E-ITS Veebirakenduste arendus ning kirjeldatud teid mööda ja dokumenteeritud CON.10.M2 Veebirakenduse juurdepääsu reguleerimine autentimisprotseduure kasutades. CON.10.M7 Konfidentsiaalsete andmete kaitse Kui rakendus kasutab brauseri küpsiseid (session cookie) või muid E-ITS Isikuandmete kaitse tehnoloogiaid (nt local storage jm), mis salvestavad kasutaja CON.2.M1 Isikuandmete kaitse kavandamine arvutisse informatsiooni, siis tuleb kasutajat sellest eelnevalt CON.2.M24 Privaatsusseadistused veebilehtedel teavitada. Rakendus ei tohi teostada X-tee päringut otse kasutaja arvutist. Rakendusserver ja andmebaas peavad olema võimelised töötama eraldi serveritel. Veebirakenduse kõik viited failidele ja kataloogidele peavad olema E-ITS Veebirakenduste arendus ilma absoluutse failiteeta. CON.10.M10 Tundliku taustainfo avaldamise piiramine Kui rakenduse poolt töödeldavate andmete konfidentsiaalsuse klass on 2 või kõrgem, peab rakenduse andmemudel võimaldama lihtsate vahenditega andmete anonümiseerimist. Välistele kasutajatele mõeldud veebilehega rakendused peavad E-ITS Veebirakenduste arendus olema kaitstud keelatud päringute eest. CON.10.M2 Veebirakenduse juurdepääsu reguleerimine CON.10.M6 Kaitse veebirakenduste volitamata automaatse kasutamise eest CON.10.M7 Konfidentsiaalsete andmete kaitse Kui rakendus võimaldab mitteautenditud kasutajal edastada E-ITS Veebirakenduste arendus andmeid, tuleb need andmed puhastada XSS filtriga. CON.10.M15 Päringuvõltsingu takistamine Kui on nõutud andmete jälgimise rakendamine tuleb selleks https://github.com/e-gov/AJ/ kasutada RIA poolt pakutavat andmejälgijat. Loodava lahenduse realiseerimisel tuleb arvestada, et rakendus paigaldatakse Kubernetese klastrisse. Rakenduste paigaldused tehakse Helm skriptidega. Juhul, kui rakendus loob faile või võimaldab failide üles laadimist E-ITS Veebirakendused tuleb failide salvestamiseks kasutada S3 tehnoloogiat. APP.3.1.M4 Andmete ja sisu kasutamise piiramine Lähtekood Lähtekood tarnitakse koodivaramu koodihoidla KuM sektsiooni.  https://koodivaramu.eesti.ee/kultuuriministeerium Koodihoidlasse üleslaaditud lähtekood peab olema täielik ehk sellest saab koostada ja paigaldada täisfunktsionaalse rakenduse. Üleantavad versioonid peavad olema ilmutatud kujul harudena (releases) või minimaalselt viitedetega (tags), milliste nimetused kajastavad üleantavaid versioone. Koodihoidla failide vaikimisi kodeering on UTF-8 ilma BOM signatuurita. Välja arvatud juhtudel, kui tehnilises kirjelduses on tehnoloogiliste eripärade või muude piirangute tõttu sätestatud teisiti. Koodihoidla failide realõpud LF tüüpi. Koodihoidlasse üleslaaditud lähtekood peab olema kompileeritav ilma muudatusteta. Koodihoidlasse tuleb korraga laadida kõik iga muudatusega seotud Enne materjalide üleslaadimist tuleb koodihoidlast võtta viimane uuendatud koodi materjalid. seis. Materjalide üleslaadimisega peab kaasnema sisuline üleslaetavat materjali kirjeldav kommentaar. Rakenduse lähtekood peab olema kommenteeritud detailsusega, mis võimaldab erialast ettevalmistust omaval tarkvaraarendajal teostada süsteemi edasiarendust. Rakenduse lähtekood, kommentaarid, muutujate, tüüpide ja funktsioonide nimed peavad olema inglise keeles, sisulised ja andma aimu nende otstarbest. Koodis kasutatavad konstandid ja lühendid tuleb kirjutada suurtähtedega. Rakenduse lähtekood ei tohi sisaldada pöördumispunktide aadresse, paroole ega võtmeid (ka siis kui need on koodist väljakommenteeritud). Rakenduse lähtekoodis peab olema võimalik tuvastada muudatuse teinud konkreetne füüsiline isik. Lähtekood peab olema kompileeritav tellija poolt määratletud Tellija poolt aktsepteeritud Java kompilaatorid on Gradle ja MAVEN. arenduskomplekti ja versioonidega. Alternatiivsete vahendite kasutamine on lubatud kui nende rakendamine on põhjendatud ja kooskõlastatud tellijaga. Kasutuses mitteolev kood tuleb rakendusest eemaldada või selgelt eraldada. Andmebaas Andmebaasi tabelid ja väljad peavad olema kommenteeritud. Kommentaarid peavad olema inglise keeles ja sisulised. Andmebaasi väljapikkused peavad olema väljendatud sümbolites (tähemärkide arv). Andmebaasi objektide nimetused peavad olema inglise keeles ning andma selget aimu otstarbest (va ajutised rakenduse poolt genereeritavad tabelid nn temp). Andmebaasi tabelite nimetused tohivad sisaldada ladina tähestiku väiketähti „a-z“, numbreid „0-9“, alakriipsu "_". Andmebaasi objekti nimetus ei tohi alata numbriga. Igas andmebaasi tabelis peab olema defineeritud primaarvõti (primary key). Ühest andmetabelist teise viitamisel tuleb kasutada võõrvõtit (foreign key). Võõrvõtme nimi peab seostuma tabeli ja väljaga, millele see viitab. Kõik võõrvõtmed peavad olema indekseeritud. Indeksite rakendamine peab toimuma vajaduspõhiselt, lähtudes süsteemi jõudlusanalüüsist. Eesmärk on tasakaalustada päringute kiirust ja andmebaasi optimeeritust, vältides üle optimeerimist. Kõik tabelid peavad sisaldama välju "date_created", "date_updated", "date_deleted". Andmebaasi objektide loomiseks tuleb kasutada andmebaasi KUM poolt heaks kiidetud migratsioonivahenditeks on Liquibase ja Flyway migratsioonivahendeid. Kui rakenduse versioon nõuab andmebaasi muudatusi, peavad üleantava koodiga kaasas olema andmebaasi paigalduse migratsiooniskriptid. Logimine ja monitooring Süsteemi muudatused ja rakenduse ning kasutajate tegevused logitakse seostatuna muudatuse/tegevuse teostanud konkreetse füüsilise isiku ja tema rolliga. Logiteadete sisu peab olema kirjutatud inglise keeles. Logimine peab olema konfigureeritav ning kasutada tuleb standardseid logiformaate, et võimaldada hilisem logianalüsaatorite kasutamine. Failisüsteemi logimisel peavad logid olema katalogiseeritud, üldlevinud faililaiendiga (nt .log, .txt, .xml) ja roteeruvad. Rakendus ei tohi väljastada kasutajale veateateid või aktiivsusjälgi, mis sisaldavad seansi identifikaatorit või isikuandmeid. Sisselogimise mehhanismid peavad olema võimelised logima nii õnnestunud, kui ka ebaõnnestunud sisselogimise katseid. Rakendus peab omama sisemist meetrikat ja infot sündmuste kohta. Nt. Prometheus Rakenduse ärilogi(auditlog) andmebaas peab olema sõltumatu rakenduse tööbaasist. Auditlogide dokumentatsioon peab sisaldama selget määratlust logitavate sündmuste ja tegevuste kohta, tagades läbipaistvuse ning vastavuse turva- ja regulatiivsetele nõuetele. Logide säilitamise põhimõtted peavad olema selgelt määratletud, E-ITS OPS.1.1.5 Logimine https://eits.ria.ee/et/versioon/2024/eits- sealhulgas logitavate sündmuste tüübid ning nende säilitamise periood poohidokumendid/etalonturbe-kataloog/ops-kaeidutoeoed/ops1-oma- vastavalt turvanõuetele ja regulatiivsetele nõuetele. kaeidutoeoed/ops11-itpoohitoeoed/ops115-logimine Kõik logid peavad olema kaitstud rakenduse kasutaja poolse lubamatu ligipääsu ja muutmise eest. Kui rakenduse konfidentsiaalsuse turvaosaklass on 2 või kõrgem (S2, Turvaosaklasside S3 ja T3 korral peab rakendus logima ka administraatorite ja S3) ja/või tervikluse turvaosaklass on 2 või kõrgem (T2, T3), peab haldurite poolt tehtavaid andmete muudatusi (sh otse andmebaasis) ja vaatamisi. rakendus logima andmete loomist, muutmist (sh kustutamist) ja vaatamist. Logimise tasandid on: • DEBUG – arendamise etapis süsteemi olekut kirjeldav informatsioon (kasutatakse ainult arenduskeskkonnas) • INFO – kasutaja päringute informatsioon, kasutaja infoteated (nt „Andmed salvestatud“, „Andmed muudetud“) • WARNING – kasutajale kuvatav valest sisendist tekkiv oodatud viga (nt „Vigaselt sisestatud andmed“) •ERROR – süsteemi vead, mis tekivad kasutaja sisendist (nt vigase andmebaasipäringu tekkimine) • FATAL – rakenduse toimimise kriitilised vead, mis takistavad rakenduse tavapärast toimimist (nt vigane konfiguratsioon) Konfiguratsioon Kõik komponendid peavad olema ajakohase turvakonfiguratsiooniga ja versiooniga. Komponentide vaheline (nt rakendusserveri ja andmebaasi serveri) suhtlus peab olema krüpteeritud. Komponentide vahelise ühenduse jaoks tuleb kasutada minimaalselt vajalike õigustega kontot. Rakenduste omavahelisel suhtlemisel tuvastatakse üksteist oAuth2 abil. Rakendus peab olema aedikkäideldud, konteinerdatud või muul viisil isoleeritud, et takistada ründajal rakenduse kasutamist teise rakenduse ründamiseks. Rakenduse konfiguratsiooniparameetrid ei tohi muutmisel vajada Eraldi konfiguratsioonifail võib olla kasutusel logimise ning arendaja ja uuesti kokku kompileerimist. administraatori vastutusala parameetrite jaoks. Konfiguratsiooniparameetrite nimed peavad olema inglise keelsed Kui sisulist nime ei ole võimalik kasutada, siis peab kasutatava nime kõrval olema ja sisulised. seletus. Konfiguratsioonifailid peavad olema rakendusserveri tüübile vastavalt vaikimisi kaitstud. Samasisulisi konfiguratsiooni parameetreid ei tohi korduvalt kasutada, lubatud on kirjeldada ainult üks kord. Kasutajaliides Kasutajaliidese kõik disainiotsused peavad olema tellijaga kooskõlastatud. Kasutajaliideste realiseerimiseks kasutatavad UI raamistikud ja Tuleb hakata kasutama Veera disainisüsteemi komponendid tuleb tellijaga eelnevalt kooskõlastada. https://veera.eesti.ee/08be8a71e/p/48af80-veera-disainisusteem-100 Ühe veebirakenduse realiseerimiseks kasutatavate erinevate UI raamistikute ja komponentide arv peab olema minimaalne. Kasutajaliidese kõik osad ja teated peavad olema eestikeelsed. Peale kasutaja sisselogimist rakendusse kuvatakse sisse loginud kasutaja nimi ja rolliinfo. Kui ühele kasutajatunnusele on määratud mitu rolli, kuvatakse kasutajale rollivalik. Kasutajaliides peab alati küsima kinnitust andmete kustutamise ja massmuutmise kohta. Kasutajal peab olema võimalik rakenduses tegevus pooleli jätta ja hiljem jätkata samast kohast ilma kohustuseta algusesse liikuda. eID poolt toetatav brauserite nimekiri on leitav: http://www.id.ee/?id=33993 Kasutajaliides peab veatult toimima brauseritega, mida toetab eID Lahendus peab toetama brauserite versioone, mille kasutus on vähemalt 5% Eestis baastarkvara, kui hanke tehnilises kirjelduses ei ole nõutud teisiti. ning mille kasutustrend on kasvav. Kõikide eelnevast nõudest välja jäävate brauserite kasutamise puhul Kasutajat tuleb teavitada mittetoetatud brauseri kasutamisest. peab kasutaja saama tõrke korral vastavasisulise teavituse. Veebilehitseja navigatsiooninupud peavad käituma rakenduses analoogiliselt klassikalise veebilehitsemisega (nt veebilehitseja „Tagasi“ nupp navigeerib kasutaja eelmisele kuvatud lehele). Kasutajaliideses navigeerimine peab lähtuma äriloogikast ja võimaldama andmete sisestamist ning kasutamist ainult klaviatuuri kasutades. Kasutajaliidese toiminguni navigeerimiseks peab kehtima kolme klõpsu printsiip, väljalogimiseks ühe klõpsu printsiip. Interaktiivse vormi puhul ei tohi lehe värskendamisega tegevust korrata (nt faili teistkordselt laadida, saadetud andmeid uuesti saata). Kui vorm koosneb mahukatest andmeväljadest, peab kasutajaliides Mahukad andmeväljad täpsustatakse/lepitakse kokku detailanalüüsi käigus eeldefineeritud ajavahemike järel salvestama välja sisu, et vältida arenduse teostamisel. Salvestamine puudutab vaid sisestamise vormi kohta. sisestatud andmete kadumist. Vormide puhul peab tellija poolt nimetatud väljal olles kuvama kasutajale juhised, mis kujul informatsiooni väljale sisestada tuleb. Andmete sisestamisel peab rakendus kontrollima nii esitluskihis kui tagasüsteemis (backend), et sisestatud andmed vastavad välja tüübile. Rakendus peab võimalikult palju informatsiooni automaatselt eeltäitma (nt kirje sisestamise kuupäev). Kasutajaliides peab olema tõlgitav teise keelde ilma rakenduse lähtekoodi muutmata. Vältida tuleb kuvasid, mis eeldavad info lugemiseks kerimist paremale-vasakule. Kui rakenduses teostatav päring on pikem kui kolm sekundit, peab kasutajat sellest visuaalselt teavitama (nt ekraanil on liivakella kujutis; kuvatakse teade, et päringut teostatakse). Rakenduse esilehel peab olema võimalus halduri poolt lisada kasutajale mõeldud teavitusi ja informatsiooni. Kasutajaliides peab teavitama kasutajat ette seansi aegumisest. Veateade peab olema kirjutatud lühidalt, selges ja lõppkasutajale arusaadavas keeles. Süsteemi rikete tehnilisi üksikasju ei tohi välja näidata. Veateade peab sisaldama probleemi kirjeldust, vea koodi ja lahendust või infot, mis juhendab kasutajat edaspidiseks vea vältimiseks. Süsteem peab asendama vaikimisi veateate lehekülje, kuid säilitama algse HTTP vastuskoodi. Testimine Rakenduse kõik üleantavad versioonid peavad olema enne tellijale üleandmist täies mahus testitud: testitakse kõiki funktsionaalseid ja mittefunktsionaalseid nõudeid. Tellija nõudmisel tuleb arendajal koos rakenduse üleandmisega esitada testitulemuste raport. Tarkvara peab sisaldama ühik-, integratsiooni- ja E2E teste. Testide ulatus ja detailid peavad olema määratletud projektidokumentatsioonis ning kajastuma testiraportis. Rakenduse igakordsel versiooni üleandmisel tellijale, peab kaasas olema skript analüüsi käigus kokkulepitud jõudlustestide teostamiseks. Jõudlustestid peavad olema läbiviidud vähemalt kahekordse eeldatava koormuse varuga. Rakenduse koormuse testimiseks tuleb luua testandmete kogum. Loodav rakendus peab olema enne tellijale tarnimist testitud Testimistulemuste raport tuleb esitada tellijale rakenduse üleandmisel. viimase kehtiva OWASP Top 10 väljatoodud turvanõrkuste vastu. Dokumentatsioon Erandiks võib olla kolmanda osapoole komponentide dokumentatsioon Kogu rakenduse dokumentatsioon peab olema kirjeldatud (dokumentatsioon, mis pole kirjutatud tellija jaoks). Erandina käsitletakse ka korrektses eesti keeles. väliste partneritega seotud projektdokumentatsiooni. Kõik erandid tuleb kirjalikku taasesitamist võimaldaval viisil kooskõlastada tellijaga enne dokumentatsiooni koostamist. Dokumentatsioon peab olema eesti keeles ja sisaldama versiooni numbrit, muutmise kuupäeva, autori nime ja olema koostatud selge Iga dokumendi versiooni kõik uuendused (võrrelduna eelmise kehtinud struktuuriga ja peab olema piisavalt selge, et Tellija iseseisvalt versiooniga), peavad olema visuaalselt eristatavad. suudab selle järgi toimida. Lahenduse dokumentatsioon peab sisaldama RIHA määrusest RIHA määrus on leitav: https://www.riigiteataja.ee/akt/13147268?leiaKehtiv tulenevat kohustuslikku informatsiooni. Lahenduse dokumentatsioon peab sisaldama E-ITS'is nõutud Nõuded on leitavad (CON.8.M12 Detailne tarkvara dokumentatsioon): dokumente. https://eits.ria.ee/et/versioon/2024/eits-poohidokumendid/etalonturbe- kataloog/con-kontseptsioonid-ja-metoodikad/con8-tarkvaraarendus Kõik dokumendis viidatud ja seotud teised dokumendid peavad olema tellijale edastatud enne dokumendi heakskiitmist tellija poolt. Kõik tellijale esitatud dokumendid peavad olema redigeeritavad enamlevinud redaktoritega (nt Microsoft Office, LibreOffice). Loetelu üleantavatest dokumentidest lepitakse kokku konkreetse lahenduse vajadustest lähtuvalt. Reeglina peab üleantav dokumentatsioon sisaldama järgmiseid dokumente: • Spetsifikatsioon ehk süsteemianalüüs; • Prototüüp ja kasutajaliidese vaated, seejuures prototüüpimise keskkond peab olema tellija poolt kontrollitav; • Rakenduse lähtekood; • Paigaldusjuhendid ja skriptid; • Kasutusjuhendid; • Testimise kokkuvõte. Üleantav spetsifikatsioon ehk süsteemianalüüs peab võimaldama Eelistatud keskkond on KuM Atlassian Confluence. süsteemis realiseeritud lahenduste verifitseerimist andmebaasi tasemel. TÖÖDE ÜLEANDMISE-VASTUVÕTMISE AKT Tallinnas, kpv digiallkirjas Võttes aluseks Eesti Rahvusraamatukogu (edaspidi “Tellija”) ja AS PricewaterhouseCoopers Advisorsi (edaspidi “Töövõtja”) vahel 11. juunil 2025. a sõlmitud Kliendilepingu tingimusi (Tasud) annab Töövõtja üle ja võtab Tellija vastu järgneva töö: Raamatukogude sündmus-, proaktiivse- ja nõusolekuteenuse ärianalüüsi lõpparuande koos järgnevate dokumentidega: 1. Lisa 2_RaRa_Mittefunktsionaalsed nõuded 2. Lisa 3_RaRa_Tehnoloogiline profiil 3. Lisa 4_Detailne õigusanalüüs 4. Lisa 5_RaRa arendustööd- ja maksumused 5. Joonised: a. RaRa_architecture.png b. RaRa_jada1.png c. RaRa_jada2.png d. RaRa-arhitecture.xml e. RaRa_jada1.xml f. RaRa_jada.xml Nimetatud töö on teostatud ja üle antud täies mahus. Tellijal ei ole pretensioone töö teostamise osas. Akt ning selle põhjal koostatud arve on aluseks Töövõtjale tasu väljamaksmiseks, tasumisele kuulub 54 800 (viiskümmend neli tuhat kaheksasada) eurot, millele lisandub käibemaks. Töövõtja: Tellija: /allkirjastatud digitaalselt/ /allkirjastatud digitaalselt/ Tarmo Meresmaa Anneli Nappus Direktor Projektijuht AS PricewaterhouseCoopers Advisors Eesti Rahvusraamatukogu Lp Kristiina Alliksaar Kultuuriministeerium 20 . 0 1 .202 6 Maksetaotlus Vastavalt partnerlepingu nr 13-5/34 -1 punktile 4.2. esitab Eesti Rahvusraamatukogu maksetaotluse „Ühtekuuluvuspoliitika fondide rakenduskava 2021–2027” alusel erald atud vahendite väljamaksmiseks RaRa arvelduskontole Swedbank A S -is nr: EE312200221001158934 . Lugupidamisega, Priit Sohkin Finantsjuht Eesti Rahvusraamatukogu
Allikas: Kultuuriministeerium dokumendiregister →
dokumendiregister.eeAsutusedEesti avalike dokumendiregistrite otsing · nimistu.ee andmetel