Arkkitehtuuri - espoon-voltti/evaka GitHub Wiki

Yleistä

eVaka on varhaiskasvatuksen toiminnanohjausjärjestelmä, jolla voidaan hallita koko varhaiskasvatuksen elinkaari aina varhaiskasvatukseen hakeutumisesta operatiiviseen toimintaan ja tietojen lakisääteiseen säilyttämiseen asti.

Korkean tason arkkitehtuuri

eVaka muodostuu seuraavista osista:

  • Käyttöliittymät
  • Taustapalvelut
  • Tietokannat ja tiedostojen varastointi
  • Integraatiot

Käyttöliittymät

Käyttöliittymiä on kolme: kuntalaisen käyttöliittymä, henkilökunnan työpöytäkäyttöliittymä sekä henkilökunnan mobiilikäyttöliittymä. Käyttöliittymät ovat selainpohjaisia. Henkilökunnan mobiilikäyttöliittymä on PWA-sovellus, ja tukee mm. notifikaatioita.

Käyttöliittymät on toteutettu TypeScriptillä ja Reactilla ja bundlataan webpackilla. Muut kirjastoriippuvuudet sekä tuetut selainversiot näkee package.json-tiedostosta.

Taustapalvelut

Taustapalveluita on kolme.

eVaka arkkitehtuuri

proxy

Etummaisena on proxy, joka jakelee staattiset tiedostot (käyttöliittymät), ja välittää muut pyynnöt eteenpäin apigw: lle. proxy on toteutettu nginx:llä.

apigw

apigw vastaa sessionhallinnasta, ja tekee myös alustavan pyyntöjen suodatuksen sessiotyypin perusteella, minkä jälkeen se välittää pyynnöt service:lle. apigw on toteutettu TypeScriptillä, Expressillä ja NodeJS:llä, ja muut kirjastoriippuvuudet näkee package.json-tiedostosta.

apigw tallentaa sessionhallinnan tarvitsemat tiedot Redis-tietokantaan. Se käyttää tunnistautumiseen Suomi.fi-tunnistusta ja karttatoiminnallisuuteen Digitransit-rajapintaa.

service

service toteuttaa eVakan bisneslogikaan, ja se on toteutettu Kotlinilla ja Spring Bootilla. Muut kirjastoriippuvuudet näkee build.gradle.kts-tiedostosta. service sisältää tausta-ajomekanismin, jota käytetään pitkäkestoisten ja ajastettujen tehtävien vikasietoiseen suorittamiseen.

service tallentaa dataa PostgreSQL-tietokantaan ja tiedostoja S3:een. Sähköpostin lähettämiseen käytetään Amazon SES: iä. service myös integroituu useaan ulkopuoliseen järjestelmään, ks. Integraatiot.

Integraatiot

eVaka integroituu moniin muihin järjestelmiin.

  • Väestötietojärjestelmä (liityntäpalvelimen kautta)
  • Suomi.fi-tunnistus
  • Suomi.fi-viestit
  • Digitransit
  • Varda
  • Koski
  • Laskutus
  • Palvelusetelimaksatus
  • Työvuorosuunnittelu
  • Ruokapalvelu
  • Arkistointi (tulossa)

Osan integraatioista, kuten laskutus ja palvelustelimaksatus, voi toteuttaa eVakan ulkopuolisella koodilla käyttäen Springin dependency injection -mekanismia. Lähtökohtaisesti eVaka on aina integraatioissa kutsuva pää, joitain harvoja poikkeuksia lukuunottamatta.

Monitorointi

eVaka tuottaa käyttölokeja, audit-lokeja sekä OpenTracing/OpenTelemetry-dataa. Käyttöliittymät sisältävät mahdollisuuden lähettää virheitä Sentryyn.

Projektin rakenne

Kaikki projektin lähdekoodi on GitHubin evaka-projektissa. Koodissa olevat kuntakohtaisesti toteutettavat integraatiot sekä konfiguraatio ovat Espoon kaupungille räätälöityjä, ja muut kunnat ovat toteuttaneet niistä osan uudelleen.

Projektin pilvi-infrastruktuuria ei ole kuvattu lähdekoodin yhteydessä, vaan se on jokaisen eVakaa käyttävän tahon vastuulla.