NSILM

Üldkirjeldus

Teenus võimaldab genereerida arengukava versiooni, mida on võimalik jagada URL-i kaudu. Versioon luuakse asutuse / ametikoha muudetava arengukava põhjal ning ainult juhul, kui arengukavale on määratud periood. 

Seotud andmeobjektid:

Seotud Jira taskid

NSIL-1004 - Getting issue details... STATUS

Eeltingimused ja kasutusõigused

  • Kui tegemist on asutusepõhise arengukavaga (developmentPlanScope = INSTITUTIONAL):
    • Kasutajal peab olema seos arengukava asutusega ning tal peab olema ka selle asutuse juures arengukava lisamise ja muutmise õigus.
      • DevelopmentPlan.institution.id = kasutaja valitud rolliga seotud asutus,
      • Õigust reguleerib privileeg: HSILM_PLANNING_DEV_PLAN_MANAGE.
  • Kui tegemist on isikupõhise arengukavaga (developmentPlanScope = INDIVIDUAL):
    • Kasutaja peab olema arengukava omanik ja tal peab olema seos nii arengukava asutuse kui ka ametikohaga.
      • DevelopmentPlan.personalCode = kasutaja isikukood
      • DevelopmentPlan.institution.id = kasutaja valitud rolliga seotud asutus
      • DevelopmentPlan.jobsite = kasutaja valitud rolliga seotud ametikoht
    • Eraldi privileegi ei ole vaja - õiguse luua enda kehtiva ametikoha kohta uusi arengukava URL-versioone annab kasutajale tema ametikoht.
  • Arhiivi ja planeerimise meeskonnaliikme rolli valinud kasutajad ei saa arengukava URL-versioone luua.

Planeerimise mooduli kasutusrollide ja õiguste kohta saab täpsemalt infot leida lehelt Kasutusõigused ja rollid.

Sisendid

AtribuutKohustuslikkus, mitmesusTüüpVaikeväärtus, valideerimineKirjeldus, täiendav info
developmentPlanId1String
  • Peab eksisteerima, olema muudetav ning sellele peab olema määratud periood.
    • developmentPlanId = DevelopmentPlan.id, mille editable = true, startDate != NULL ja endDate != NULL

Viide arengukavale, millele uus versioon luuakse.

urlPublic0..1Boolean

Võimalikud väärtused:

  • true - on avalikkusele kättesaadav
  • false - ei ole avalikkusele kättesaadav

Määrab, kas versiooni URL on avalikkusele kättesaadav. 

publicUrlAlias

0..1

String
  • Kohustuslik, kui urlPublic = true.
  • Peab vastama URI path reeglitele.
  • Peab olema 3-250 tähemärki.
  • Peab olema unikaalne kõikide asutuse / ametikoha arengukava URL-versioonide lõikes.

URL-versioonile määratud alias.

Väljundid

AtribuutKohustuslikkus, mitmesusTüüpKirjeldus, täiendav info
id

1

StringArengukava versiooni unikaalne identifikaator.
developmentPlan

1

ObjectVersiooniga seotud mittemuudetava arengukava andmed.
developmentPlan.id1String

Viide seotud mittemuudetavale arengukavale.

developmentPlan.developmentPlanScope1String

Määrab arengukava ulatuse:

  • INSTITUTIONAL - arengukava on koostatud asutusele tervikuna.
  • INDIVIDUAL - arengukava on koostatud isikule seoses konkreetse ametikohaga. 
developmentPlan.institution1Object

Arengukava seotud asutuse andmed.

developmentPlan.institution.id1String

Viide asutusele EHIS-es.

developmentPlan.institution.regCode1String

Asutuse registrikood

developmentPlan.personalCode0..1String

Arengukava omaniku isikukood, kui tegemist on isikupõhise (developmentPlanScope = INDIVIDUAL) arengukava versiooniga.

developmentPlan.jobsite0..1String

Viide ametikohale, mille kohta arengukava on koostatud, kui tegemist on isikupõhise (developmentPlanScope = INDIVIDUAL) arengukavaga. Väärtustena kasutatakse EHIS klassifikaatorit PEDAGOOG_AMETIKOHT.

developmentPlan.startDate

0..1

DateArengukava perioodi alguskuupäev.
developmentPlan.endDate

0..1

Date

Arengukava perioodi lõpukuupäev.

versionType

1

String

Määrab, kas tegemist on URL- või PDF-versiooniga. 

Võimalikud väärtused:

  1. URL
  2. PDF
urlPublic0..1Boolean

Määrab, kas vastav genereeritud URL on avalikusele kättesaadav. Kasutatakse juhul, kui versionType = "URL".

publicUrlAlias

0..1

String

Avaliku URL-i alias. Kasutatakse juhul, kui urlPublic = true.

fileId

0..1

String

Viide PDF-versiooni loomisel loodud failile. Kasutatakse juhul, kui versionType = "PDF".

validFrom

1

DateTime

Arengukava versiooni PDF-i või URL-i jagamise loomise aeg.


generator1Object

Versiooni loonud kasutaja andmed.

generator.personalCode1String

Kasutaja isikukood.

generator.firstName1String

Kasutaja eesnimi.

generator.lastName1String

Kasutaja perenimi.

generator.profileColor1String

Kasutajale määratud värvikood.

Ärireeglid

  1. URL-ina jagatavat versiooni saab luua ainult muudetava (editable = true) arengukava põhjal.
  2. Versiooni loomisel salvestatakse kõik muudetava arengukava andmed eraldi koopiana, vastavalt loomise hetke seisule.
    • Versiooni ei lisata sektsioone, millel on märge "Peida dokumendis" (hidden = true), ega nende alla kuuluvaid vormielemente. 
    • Luuakse koopiad kõigist aktiivsetest eesmärkidest, mis loomise hetkel kattuvad vähemalt osaliselt arengukava perioodiga.
      • Eesmärkide töötlemisel võetakse arvesse järgmine reegel: 
        1. Kui mõnel tegevusel puudub startDate, loetakse selle alguskuupäevaks endDate. Sellisel juhul käsitletakse tegevust kui ühepäevast, mis toimub endDate kuupäeval. 
    • Selgitus: Arengukava andmete koopia salvestatakse andmebaasi ainult URL-versiooni puhul. PDF versiooni puhul salvestatakse süsteemi üksnes loodud PDF fail.

Tegevused

  1. Süsteem kontrollib, kas kasutajal on õigust päringut teostada.
    1. Kui kasutajal ei ole õigust, lõpetatakse päringu töötlemine ja tagastatakse http veakood.
  2. Süsteem kontrollib, kas sisendandmed vastavad nõuetele.
    1. Kui andmed ei vasta nõuetele, lõpetatakse päringu töötlemine ja tagastatakse http veakood.
  3. Süsteem kontrollib, kas sisendis esitatud arengukava (developmentPlanId) eksisteerib ja on muudetav:

    1. Otsitakse Objektid#DevelopmentPlan objekti, mille:
      1. id =  sisendis esitatud developmentPlanId väärtus
      2. editable = true
    2. Kui tingimustele vastavat arengukava ei leita, lõpetatakse päringu töötlemine ja tagastatakse http veakood.
  4. Süsteem kontrollib versiooni loomise eeltingimuste täitmist:
    1. Kontrollitakse, kas olemasolevate arengukava URL-versioonide arv ei ületa kehtestatud piirmäära (20 versiooni): 
      1. Selleks otsitakse olemasolevaid arengukava URL-versioone:
        1. Otsitakse Objektid#DevelopmentPlanVersion, mille:
          1. versionType = "URL"
          2. urlPublic != NULL
          3. developmentPlanIdObjektid#DevelopmentPlan.id, mille:
            1. developmentPlanScope = Objektid#DevelopmentPlan.developmentPlanScope, mille id = sisendis esitatud developmentPlanId väärtus
            2. institution.id = Objektid#DevelopmentPlan.institution.id, mille id = sisendis esitatud developmentPlanId väärtus
            3. personalCode = Objektid#DevelopmentPlan.personalCode, mille id = sisendis esitatud developmentPlanId väärtus
            4. jobsite = Objektid#DevelopmentPlan.jobsite, mille id = sisendis esitatud developmentPlanId väärtus
            5. editable = false
        2. Kui ühtegi tingimustele vastavat arengukava ei leita, jätkub protsess sammust 5 (asutusel / ametikohal ei ole ühtegi URL-ina jagatud arengukava versiooni). 
        3. Kui leitud versioone on 20 või rohkem, lõpetatakse päringu töötlemine ja tagastatakse http veakood. (Arengukava URL-versioonide arvu piirmäär on saavutatud.) 
    2. Kui luuakse avalikult URL-ina jagatav versioon (urlPublic = true ja publicUrlAlias != NULL), kontrollitakse, et sama alias ei oleks juba kasutusel mõne varasema versiooni puhul: 
      1. Otsitakse Objektid#DevelopmentPlanVersion objekti, mille:
        1. developmentPlanId = üks eelnevalt leitud arengukavade ID-dest (Objektid#DevelopmentPlan.id)
        2. publicUrlAlias = sisendis esitatud publicUrlAlias väärtus
      2. Kui leitakse versioon sama publicUrlAlias-ga, lõpetatakse päringu töötlemine ja tagastatakse http veakood (teist samasuguse URL-iga arengukava versiooni ei tohi eksisteerida).
  5. Süsteem loob sisendis esitatud arengukava (developmentPlanId) hetkeseisu andmetest koopia: 
    1.  Kui arengukavale on lisatud logo (Objektid#DevelopmentPlan.logoFileId != NULL), siis luuakse logo failist koopia:
      1. Otsitakse logo faili metaandmeid: 
        1. Otsitakse Objektid#File objekti, mille:
          1. id = sisendis esitatud arengukava Objektid#DevelopmentPlan.logoFileId väärtus
        2. Kui vastavat objekti ei leita, liigub süsteem sammu 5.b juurde.
      2. Leitud metaandmete alusel leitakse fail failihoidlast:
        1. Otsitakse failisüsteemist fail, mille:
          1. id = leitud Objektid#File.fileSystemId väärtus.
        2. Kui vastavat faili ei leita, liigub süsteem sammu 5.b juurde.
      3. Leitud failist tehakse koopia. 
      4. Loodud koopia metaandmed salvestatakse Objektid#File tabelisse.
        1. Süsteem loob Objektid#File objekti järgmiste andmetega:
          1. id = UUID
          2. Faili asukoha andmestik failisüsteemis 
          3. fileName = Faili nimetus koos faililaiendiga (nt. "minu pilt.png")
          4. mimeType = Faili mime tüüp (nt. "image/x-png")
          5. size = Faili suurus baitides
          6. audit (loomine) = audit (loomine)
    2. Arengukava põhiandmestikust luuakse koopia: 
      1. Koopia luuakse olemasolevast Objektid#DevelopmentPlan objektist, muutes järgmisi välju:
        1. editable = false
        2. logoFileId = just salvestatud logo faili koopia metaandmete kirje ID (Objektid#File.id)
        3. Ülejäänud andmed jäävad samaks.
    3. Arengukava sektsioonidest ja vormielementidest luuakse koopiad:
      1. Otsitakse sisendis esitatud arengukava (developmentPlanId) sektsioone:
        1. Otsitakse Objektid#DevelopmentPlanSection objekte, mille:
          1. developmentPlanId = sisendis esitatud developmentPlanId väärtus
        2. Kui ühtegi sektsiooni ei leita, jätkub protsess sammust 5.d.
      2. Leitud sektsioonid järjestatakse previousSectionId alusel. 
      3. Nimekirjast eemaldatakse sektsioonid, mille hidden = true.
        1. Iga eemaldamise järel uuendatakse sellele sektsioonile järgneva sektsiooni previousSectionId väärtus. 
      4. Iga järelejäänud Objektid#DevelopmentPlanSection objekti puhul: 
        1. Luuakse sellest koopia, kus muudetakse:
          1. developmentPlanId = just loodud arengukava objekti ID (Objektid#DevelopmentPlan.id).
        2. Otsitakse sektsiooni vormielemente ja luuakse nendest koopiad:
          1. Otsitakse Objektid#DevelopmentPlanElement objekte, mille:
            1. developmentPlanSectionId = töödeldava sektsiooni ID (Objektid#DevelopmentPlanSection.id). 
            2. Kui ühtegi elementi ei leita, jätkub protsess sammust 5.d.
          2. Iga leitud Objektid#DevelopmentPlanElement objekti puhul:
            1.  Kui Objektid#DevelopmentPlanElement.inputType = IMAGE, tehakse koopia vormielemendiga seotud pildi failist:
              1. Otsitakse pildi faili metaandmeid: 
                1. Otsitakse Objektid#File objekti, mille:
                  1. id = töödeldava vormielemendiga seotud faili ID (Objektid#DevelopmentPlanElement.file.id).
                2. Kui vastavat objekti ei leita, jätkub protsess sammust 5.b.ii.
              2. Leitud metaandmete alusel leitakse fail failihoidlast:
                1. Otsitakse failisüsteemist fail, mille:
                  1. id = leitud Objektid#File.fileSystemId väärtus.
                2. Kui vastavat faili ei leita, jätkub protsess sammust 5.b.ii.
              3. Leitud failist tehakse koopia. 
              4. Loodud koopia metaandmed salvestatakse Objektid#File tabelisse.
                1. Süsteem loob Objektid#File objekti järgmiste andmetega:
                  1. id = UUID
                  2. Faili asukoha andmestik failisüsteemis 
                  3. fileName = Faili nimetus koos faililaiendiga (nt. "minu pilt.png")
                  4. mimeType = Faili mime tüüp (nt. "image/x-png")
                  5. size = Faili suurus baitides
                  6. audit (loomine) = audit (loomine)
            2. Luuakse koopia töödeldavast Objektid#DevelopmentPlanElement objektist, kus muudetakse:
              1. developmentPlanSectionId = just loodud sektsiooni ID (Objektid#DevelopmentPlanSection.id)
              2. Kui kopeeritava vormielemendi inputType = IMAGE, siis file.id just salvestatud faili metaandmete kirje ID (Objektid#File.id).
          3. Süsteem kordab neid tegevusi, kuni kõik töödeldava sektsiooni vormielemendid on töödeldud. 
      5. Süsteem kordab neid tegevusi, kuni kõik sektsioonid on töödeldud.
    4. Arengukava perioodile vastavatest aktiivsetest eesmärkidest luuakse koopiad, mis seotakse just loodud arengukava objektiga:  
      1. Eesmärgid valitakse järgmise loogika alusel:
        1. Otsitakse kõik Objektid#Goal objektid, mille:
          1. goalScope = sisendis esitatud arengukava Objektid#DevelopmentPlan.developmentPlanScope väärtus
          2. institution.id = sisendis esitatud arengukava Objektid#DevelopmentPlan.institution.id väärtus
          3. personalCode = sisendis esitatud arengukava Objektid#DevelopmentPlan.personalCode väärtus
          4. jobsite = sisendis esitatud arengukava Objektid#DevelopmentPlan.jobsite väärtus
          5. archived = false
        2. Kui eesmärke ei leita, jätkub protsess sammust 6.
        3. Leitud eesmärgid järjestatakse previousGoalId alusel. 
        4. Nimekirjast eemaldatakse pooleliolevad eesmärgid.
          1. Iga eesmärgi puhul kontrollitakse, kas:
            1. Objektid#Goal.name != NULL
            2. Objektid#Goal.description != NULL
            3. Eesmärgil on vähemalt üks seotud tegevus:
              1. Leidub vähemalt üks Objektid#GoalActivity objekt, mille goalId = töödeldava eesmärgi ID.
          2. Kui mõni tingimus ei ole täidetud, eemaldatakse eesmärk nimekirjast.
          3. Süsteem kordab neid tegevusi, kuni kõik eesmärgid on töödeldud. 
        5. Järgmisena eemaldatakse nimekirjast eesmärgid, mille tegevuste periood ei kattu arengukava perioodiga vähemalt osaliselt.
          1. Iga eesmärgi puhul kontrollitakse:
            1. Kas eesmärgi perioodi alguskuupäev (st varaseima seotud tegevuse startDate) ei ole hilisem kui arengukava lõpukuupäev (endDate):  
              1. Otsitakse Objektid#GoalActivity objekte, mille:
                1. goalId = töödeldava eesmärgi ID (Objektid#Goal.id)
              2. Leitud tegevuste puhul kontrollitakse, kas leidub selline, mille:
                1. startDate (kui mõne tegevuse startDate = NULL, siis kasutatakse selle endDate väärtust):
                  1. on kõige varasem kõigi selle eesmärgiga seotud tegevuste seas, ja
                  2. ei ole hilisem kui arengukava Objektid#DevelopmentPlan.endDate.
              3. Kui tingimus ei ole täidetud:
                1. Eesmärk eemaldatakse nimekirjast.
                2. Uuendatakse eemaldatud eesmärgile järgneva eesmärgi previousGoalId väärtus. 
                3. Liigutakse järgmise eesmärgi juurde.
            2. Kas eesmärgi perioodi lõpukuupäev (st hiliseima seotud tegevuse endDate) ei ole varasem kui arengukava alguskuupäev (startDate):  
              1. Kontrollitakse, kas eelnevalt leitud Objektid#GoalActivity objektide hulgas on selline, mille:
                1. endDate:
                  1. on kõige hilisem kõigi selle eesmärgiga seotud tegevuste seas, ja
                  2. ei ole varasem kui arengukava Objektid#DevelopmentPlan.startDate.
              2. Kui tingimus ei ole täidetud:
                1. Eesmärk eemaldatakse nimekirjast.
                2. Uuendatakse eemaldatud eesmärgile järgneva eesmärgi previousGoalId väärtus.  
                3. Liigutakse järgmise eesmärgi juurde.
            3. Süsteem kordab neid samme, kuni kõigi eesmärkide vastavus tingimustele on valideeritud. 
      2. Süsteem loob järelejäänud eesmärkidest koopiad ja seob neid just loodud arengukava objektiga:
        1. Iga järelejäänud Objektid#Goal objekti puhul:
          1. Otsitakse seotud mõõdikuid ja tegevusi:
            1. Otsitakse kõiki Objektid#GoalMetrics objekte, mille goalId = töödeldava eesmärgi ID.
            2. Otsitakse kõiki Objektid#GoalActivity objekte, mille goalId = töödeldava eesmärgi ID.
          2.  Seejärel luuakse uus Objektid#DevelopmentPlanGoal objekt järgmiste parameetritega:
            1.  id = UUID
            2. developmentPlanId = just loodud arengukava koopia ID (Objektid#DevelopmentPlan.id)
            3. goalId = kopeeritava eesmärgi ID (Objektid#Goal.id)
            4. institution.id = Objektid#Goal.insitution.id

            5. institution.name = Objektid#Goal.insitution.name
            6. institution.type = Objektid#Goal.insitution.type

            7. goalScope = Objektid#Goal.goalScope

            8. jobSite = Objektid#Goal.jobsite

            9. personalCode = Objektid#Goal.personalCode

            10. name = Objektid#Goal.name

            11. description = Objektid#Goal.description

            12. previousGoalId = eelmises sammus koostatud nimekirja põhjal eelneva eesmärgi ID
            13. metrics nimekirja lisatakse iga seotud Objektid#GoalMetrics objekti kohta:
              1. metrics.id = Objektid#GoalMetrics.id

              2. metrics.description = Objektid#GoalMetrics.description

              3. metrics.createdAt  = Objektid#GoalMetrics.createdAt
              4. metrics.reports nimekirja lisatakse kõik selle objekti Objektid#GoalMetrics.reports

                1. metrics.reports.workspaceId = Objektid#GoalMetrics.reports.workspaceId

                2. metrics.reports.reportId = Objektid#GoalMetrics.reports.reportId

                3. metrics.reports.bookmark = Objektid#GoalMetrics.reports.bookmark

              5. metrics.targets nimekirja lisatakse kõik selle objekti Objektid#GoalMetrics.targets

                1. metrics.targets.year = Objektid#GoalMetrics.targets.year

                2. metrics.targets.description = Objektid#GoalMetrics.targets.description

            14. activities nimekirja lisatakse iga seotud Objektid#GoalActivity objekti kohta:
              1. activities.id = Objektid#GoalActivity.id

              2. activities.activityName = Objektid#GoalActivity.activityName

              3. activities.previousActivityId = Objektid#GoalActivity.previousActivityId
              4. activities.startDate = Objektid#GoalActivity.startDate

              5. activities.endDate = Objektid#GoalActivity.endDate

        2. Süsteem kordab neid samme, kuni kõigist eesmärkidest on koopiad loodud. 
  6. Versiooni genereerinud kasutajale määratakse profiilivärv järgmise loogika alusel:
    1. Süsteem kontrollib, kas päringu käivitanud kasutajal on meeskonnaliikme kirje arengukava asutuse / ametikoha piires. 
      1. Otsitakse Objektid#GoalTeamMember objekte, mille:
        1. personalCode = päringu käivitanud kasutaja isikukood
      2. Kui sobivat meeskonnaliikme kirjet ei leita, liigub süsteem edasi sammu 6.b juurde.
      3. Kui leitakse sobiv meeskonnaliikme kirje, otsitakse Objektid#Goal objekte, mille:
        1. goalScope = sisendis esitatud arengukava Objektid#DevelopmentPlan.developmentPlanScope väärtus
        2. institution.id = sisendis esitatud arengukava Objektid#DevelopmentPlan.institution.id väärtus
        3. personalCode = sisendis esitatud arengukava Objektid#DevelopmentPlan.personalCode väärtus
        4. jobsite = sisendis esitatud arengukava Objektid#DevelopmentPlan.jobsite väärtus
        5. teamMembers.id = üks eelnevalt leitud Objektid#GoalTeamMember.id väärtustest
      4. Kui leitakse vähemalt üks sobiv eesmärk, määratakse kasutajale sama profiilivärv, mis on meeskonnliikmel, kelle ID-ga see eesmärk seotud on. 
    2. Kui meeskonnaliikme kirjet ei leita:
      1. Süsteem kontrollib, kas kasutajaga on seotud mõni varem loodud arengukava versioon. 
        1. Süsteem otsib Objektid#DevelopmentPlanVersion objekte, mille:
          1. generator.personalCode = kasutaja isikukood
        2. Kui leitakse sobiv versioon, määratakse kasutajale sama profiilivärv, mis selle versiooni genereerijal.
          1. Kasutaja profiilivärv = leitud versiooni Objektid#DevelopmentPlanVersion.generator.profileColor väärtus 
      2. Kui varasemat versiooni ei leita, valitakse kasutaja profiilivärviks üks HS visualiseerimise põhimõtete primaarse värvipaletti hulgast.
        1. Värvi määramise loogika: 
          1. Eelistatult määratakse kasutajale värv, mida ei ole veel kasutatud ühegi teise sama asutuse/ametikoha eesmärkide meeskonnaliikme ega arengukava versioone genereerija puhul. 
          2. Kui kõik unikaalsed värvid on juba kasutuses, siis valitakse värv, mida on kasutatud kõige vähem sama asutuse/ametikoha eesmärkide ja arengukavade raames.
          3. Kasutatavad värvid:
            • #14AAAD - teal
            • #468CDF - sinine
            • #9467BD - lilla
            • #E377C2 - roosa
            • #FF7F0E - oranž
            • #E6BC05 - kollane
            • #2CA02C - roheline
            • #7F7F7F - hall
            • #8C564B - pruun
            • #D62728 - punane
            • #B44FB0 - soe lilla
            • #1F77B4 - soe sinine
            • #BCBD22 - soe roheline
            • #D17805 - ooker
  7. Süsteem loob uue arengukava versiooni:
    1. Luuakse uus Objektid#DevelopmentPlanVersion objekt järgmiste väärtustega:  
      1. id = UUID
      2. developmentPlanId = just loodud arengukava objekti ID (Objektid#DevelopmentPlan.id)
      3. institution.id = just loodud arengukava objekti asutuse ID (Objektid#DevelopmentPlan.insitution.id)
      4. institution.regCode = just loodud arengukava objekti Objektid#DevelopmentPlan.institution.regCode väärtus
      5. personalCode = just loodud arengukava objekti Objektid#DevelopmentPlan.personalCode väärtus
      6. jobsite = just loodud arengukava objekti Objektid#DevelopmentPlan.jobsite väärtus
      7. versionType = "URL"
      8. urlPublic = sisendis esitatud urlPublic väärtus
      9. publicUrlAlias = sisendis esitatud publicUrlAlias väärtus (kui on määratud)
      10. fileId = NULL
      11. generator.personalCode = kasutaja isikukood
      12. generator.firstName = kasutaja eesnimi
      13. generator.lastName = kasutaja perenimi
      14. generator.profileColor = eelmises sammus kasutajale määratud profiilivärv
      15. validFrom = jooksev kuupäev ja kellaaeg
  8. Süsteem tagastab loodud arengukava versiooni andmed.