Jamix ruokatilausintegraatio - espoon-voltti/evaka GitHub Wiki
Yleiskuvaus
Jamix-integraatio tekee läsnäolovarauksiin perustuvat ruokatilaukset käyttäen Jamix-rajapintaa. Tilaus tehdään maanantain ja tiistain välisenä yönä aina seuraavalle viikolle. Tilattavia ruokia ovat: aamupala, lounas, välipala, päivällinen ja iltapala. Kaksi viimeistä on käytössä vain ympärivuorokautista toimintaa tarjoavissa yksiköissä.
Ruokailijaraportti
Raportit osiosta löytyvä ruokailijaraportti näyttää päivä- ja yksikkökohtaisen ruokatilauksen. Jos lapsella on erityisruokavalio tai ruoan rakenne valittu, tämä näytetään raportissa omalla rivillään ja lisätietokentässä on lapsen nimi.
Tilauksen tekeminen Jamixiin
Ajoitus ja aikataulutus
- Tilaukset tehdään kerran viikossa koko seuraavaksi viikoksi
- Vakioasetus on tiistaisin klo 02:25
- Tilaukset tehdään seuraavan viikon maanantaista alkaen
- Tilauksia ei tehdä:
- Suljetuille yksiköille
- Ryhmille, joilla ei ole Jamix-asiakasnumeroa
- Päiville, jolloin yksikkö ei ole auki
Tilausprosessi
ScheduledJob.SendJamixOrders
hakee tilausten async jobien ajastusta varten Jamix rajapinnasta asiakaslistauksen- Kutakin Jamix asiakasnumeroa kohden tehdään yksi tilaus per päivä
- Asiakaslistaus haetaan rajapinnasta
GET https://fi.jamix.cloud/japi/pirnet/customers
- Ryhmään tallennettu asiakasnumero muunnetaan Jamix asiakastunnisteeksi
AsyncJob.SendJamixOrder
ottaa parametriksi:- Haetun Jamix asiakastunnisteen
- eVaka tietokantaan tallennetun asiakasnumeron
- Päivämäärän
- Tilaukset lähetetään rajapintaan
POST https://fi.jamix.cloud/japi/pirnet/mealorders
Tilauslogiikka
- Tilaukset perustuvat läsnäolovarausten mukaan
- Jos lapsella ei ole läsnäolovarausta tai poissaolomerkintää, tilataan vakioruoat:
- Aamupala
- Lounas
- Välipala
- Tilaukset huomioivat:
- Yksikön aukiolopäivät
- Pyhäpäivät
- Esiopetuksen toimintakaudet
- Erityisruokavaliot ja ruoan rakenne
Rajapintakutsut
Integraatio käyttää seuraavia Jamix rajapinnan operaatioita:
GET /customers
- Asiakaslistan hakuPOST /v2/mealorders
- Ruokatilausten lähetysGET /diets
- Erityisruokavalioiden hakuGET /textures
- Ruoan rakenteiden haku
Virheenkäsittely ja uudelleenyritykset
- Tilauksen lähetyksen epäonnistuessa:
- Tehdään 3 uudelleenyritystä (
retryCount = 3
) - Uudelleenyritysten väli on 1 tunti (
retryInterval = Duration.ofHours(1)
) - Virheet kirjataan lokiin
- Tehdään 3 uudelleenyritystä (
- Tyhjät tilaukset ohitetaan (ei lähetetä Jamixiin)
- Kriittiset virheet (esim. tyhjä ruokavaliolista) aiheuttavat poikkeuksen
Tietojen synkronointi
Erityisruokavaliot ja ruoan rakenne
ScheduledJob.SyncJamixDiets
hakee 10 minuutin välein Jamix rajapinnasta:- Erityisruokavalioiden listan
- Ruoan rakenteiden listan
- Tyhjä ruokavalio- tai rakenne-lista hylätään
- Jos ruokavalio tai rakenne poistetaan Jamixista:
- Lapsen ruokavalio tai rakenne nollataan
- Yksikön johtajille lähetetään sähköposti-ilmoitus ruokavalioiden nollaantumisesta
- Ruokavalioiden lyhenteet (
dietAbbreviation
) voidaan päivittää ilman, että se vaikuttaa olemassa oleviin valintoihin
Käyttöliittymä
- Erityisruokavaliot ja ruoan rakenne asetetaan lapsen lisätietoihin:
- Henkilökunta voi muokata tietoja lapsen tietojen "Lisätiedot"-osiossa
- Erityisruokavaliot ja ruoan rakenne valitaan pudotusvalikoista
- Valinnat viedään tilauksissa automaattisesti Jamixiin yksittäisinä tilausriveinä k.o. ryhmän tilauksessa
Asetukset
Ympäristömuuttujat / Spring propertyt
evaka.job.send_jamix_orders.enabled = true
evaka.job.sync_jamix_diets.enabled = true
evaka.integration.jamix.enabled = true
evaka.integration.jamix.url
: Jamix-rajapinnan URL operaation nimeen asti, esim.https://fi.jamix.cloud/japi/pirnet/
evaka.integration.jamix.user
: HTTP Basic Auth -käyttäjätunnusevaka.integration.jamix.password
: HTTP Basic Auth -salasana
Feature-flagit
jamixIntegration
: Piilottaa ruokatilauksiin liittyvät osiot henkilökuntanäkymästä
Kuntakohtainen kustomointi
- Kullakin kunnalla käytetään eri versiota
MealTypeMapper
istä MealTypeMapper
muuttaa ruokatyypin (esim.MealType.LUNCH_PRESCHOOL
) Jamix-tilauksessa käytettäväksi mealID-tunnisteeksi- Käytettävä
MealTypeMapper
asetetaan kunnan Spring konfiguraatiossa