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. image

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 haku
  • POST /v2/mealorders - Ruokatilausten lähetys
  • GET /diets - Erityisruokavalioiden haku
  • GET /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
  • 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ätunnus
  • evaka.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 MealTypeMapperistä
  • MealTypeMapper muuttaa ruokatyypin (esim. MealType.LUNCH_PRESCHOOL) Jamix-tilauksessa käytettäväksi mealID-tunnisteeksi
  • Käytettävä MealTypeMapper asetetaan kunnan Spring konfiguraatiossa