1 Innledning
Alma-MS (Alma Micro Service) er en tjeneste bestående av to komponenter. Den ene komponenten synkroniserer data om brukere fra et IAM (Identity and access management) system, f.eks. Cerebrum, til Alma. Den andre komponenten synkroniserer data om emner fra FS (Felles Studentsystem) til Leganto.
1.1 Brukerroller
Tjenesten har ikke direkte brukere, men eksisterer for å automatisere bort tidkrevende og repetitivt arbeid med å holde brukere og emner oppdatert.
1.2 Kontaktpunkter
- Drift: Integrasjoner og identiteter (ITI-INT)
- Utvikling: Integrasjoner og identiteter (ITI-INT)
2 Redegjørelse
Tjenesten eksisterer for å automatisere bort tidkrevende og repetitivt arbeid med å holde brukere og emner oppdatert i Alma-Leganto.
3 Detaljbeskrivelse
3.1 Høynivådesign
3.1.1 Høynivådesign brukersynkronisering
TODO
3.1.2 Høynivådesign emnesynkronisering

3.2 Lavnivådesign
3.2.1 Lavnivådesign brukersynkronisering
TODO
3.2.2 Lavnivådesign emnesynkronisering
Det genereres jevnlig en csv-fil med følgende rader i følgende rekkefølge:
- COURSE_CODE (SIS-ID; UE_185_A101_1_1997_HØST_1; UA_185_A101_1_1997_HØST_1_1-1)
- COURSE_TITLE (A101 H97 Grunnkurs i astronomi; A101 H97 Fordypning i galakser)
- SECTION_ID (1)
- ACAD_DEPT (185_15_3)
- PROC_DEPT (LEGANTO)
- TERM1 (AUTUMN)
- TERM2 (blank)
- TERM3 (blank)
- TERM4 (blank)
- START_DATE (1997-05-20)
- END_DATE (1997-12-31)
- NUM_OF_PARTICIPANTS (blank)
- WEEKLY_HOURS (blank)
- YEAR (1997)
- SEARCH_ID1 (blank)
- SEARCH_ID2 (blank)
- ALL_SEARCHABLE_IDS (A101,UE_185_A101_1_1997_HØST_1; A101,UA_185_A101_1_1997_HØST_1_1-1)
- INSTR1 (blank)
- INSTR2 (blank)
- INSTR3 (blank)
- INSTR4 (blank)
- INSTR5 (blank)
- INSTR6 (blank)
- INSTR7 (blank)
- INSTR8 (blank)
- INSTR9 (blank)
- INSTR10 (blank)
- ALL_INSTRUCTORS (olanor@uio.no,karinor@uio.no)
- OPERATION (NEW; UPDATE; ROLLOVER)
- OLD_COURSE_ID (UE_185_A101_1_1996_HØST_1)
- OLD_COURSE_SECTION_ID (blank; blank; 1)
- SUBMIT_LISTS_BY (blank)
- CAMPUS_AND_PARTICIPANTS (blank)
- READING_LIST_NAME (blank)
Semestere synkroniseres i følgende tidsintervaller:
- Vår: september i fjor til februar i år
- Sommer: mars i år til august i år
- Høst: mars i år til august i år
Alle undervisning-ID-er for synkroniseringsverdige semestere hentes fra endepunktet
/undervisning gjennom FS-APIet tilgjengeliggjort gjennom Gravitee. I tillegg hentes konfigurerte undervisningsaktivitet-ID-er. For hver undervisning/aktivitet hentes tilhørende emne fra /emner/{id}. For undervisningsaktivitet-ID-er hentes også tilhørende undervisningsaktivitet fra /undervisningersaktiviteter/{id}.
COURSE_TITLE settes basert på hentet data.
Organisasjonsenheten emnet er tilknyttet hentes fra /organisasjonsenheter/{id}. ACAD_DEPT settes basert på hentet data.
TERM1 settes basert på hentet data.
START_DATE settes basert på undervisningens/aktivitetens år og semester som følger:
- Vår: 20. november i fjor
- Sommer: 20. mai i år
- Høst: 20. mai i år
END_DATE settes basert på undervisningens/aktivitetens år og semester som følger:
- Vår: 30. juni i år
- Sommer: 30. august i år
- Høst: 31. desember i år
YEAR settes til undervisningens/aktivitetens år.
ALL_SEARCHABLE_IDS settes basert på hentet data.
Personroller tilknyttet undervisningen/aktiviteten hentes fra /personroller. Deretter filtreres disse personrollene basert på personrollekoder og hvilket institutt undervisningens/aktivitetens emnet er tilknyttet til etter listen gitt på denne siden.
Dersom instituttet ikke er på listen brukes fakultetet emnet er tilknyttet.
Per desember 2025 ser listen slik ut:
FARMASØYTI: [EMNEANSVAR, STUDIEKONS]
FI: [EMNEANSVAR, STUDIEKONS]
HELSAM: [EMNEANSVAR, FORELESER, LÆRER, STUDIEKONS]
HF: [EMNEANSVAR, FAGANSVAR, HOVEDLÆRER, LÆRER, PENSUMANSV, STUDIEKONS]
SENTRE: [EMNEANSVAR, FAGANSVAR, HOVEDLÆRER, LÆRER, PENSUMANSV, STUDIEKONS]
GLOBE: [EMNEANSVAR, FAGANSVAR, HOVEDLÆRER, LÆRER, PENSUMANSV, STUDIEKONS]
IBV: [FAGANSVAR, STUDIEKONS]
IHS: [EMNEANSVAR, FORELESER, LÆRER, STUDIEKONS]
IKM: [EMNEANSVAR, FORELESER, LÆRER, STUDIEKONS]
IMB: [EMNEANSVAR, FAGANSVAR, FORELESER, LÆRER, STUDIEKONS]
ITS: [FAGANSVAR, STUDIEKONS]
JF: [ADMIN, STUDIEKONS]
KLINMED: [EMNEANSVAR, FORELESER, LÆRER, STUDIEKONS]
MF: [EMNEANSVAR, FORELESER, LÆRER, STUDIEKONS]
MN: [EMNEANSVAR, FAGANSVAR, HOVEDLÆRER, LÆRER, STUDIEKONS]
OD: [ADMIN, STUDIEKONS]
SV: [EMNEANSVAR, LÆRER, PENSUMANSV, STUDIEKONS]
TF: [HOVEDLÆRER]
UV: [FAGANSVAR, PENSUMANSV, STUDIEKONS]
HF, GLOBE og SENTRE i listen over skal være like.
For hver filtrerte personrolle hentes tilhørende person fra /personer/{id}. ALL_INSTRUCTORS settes til Feide-ID-ene til hentede personer.
Det søkes så etter emner i Alma-Leganto basert på undervisningen/aktiviteten fra endepunktet /almaws/v1/courses/{course_id} gjennom Alma-APIet tilgjengeliggjort gjennom Gravitee. Dersom et slikt emne blir funnet settes OPERATION til UPDATE. Dersom et slikt emne ikke blir funnet hentes emner i Alma-Leganto basert på FS-emnet til undervisningen/aktiviteten fra /almaws/v1/courses. Blant disse sjekkes det om undervisningen/aktiviteten har emne i Alma-Leganto for tidligere semestere. Hvis emnet ikke har det, settes OPERATION til NEW. Dersom den har det, settes OPERATION til ROLLOVER; OLD_COURSE_ID til SIS-ID-en til den nyeste, tidligere undervisningen/aktiviteten; og OLD_COURSE_SECTION_ID til 1.
Den opprettede filen kan hentes med et API-endepunkt som Alma-MS eksponerer. UiO har en maskin som henter filen og overfører den til en Sikt-maskin med sftp (SSH File Transfer Protocol).
4 Avhengigheter
Tjenesten avhenger av:
- Harbor: Lagring av container images
- Openshift: Applikasjonsplattform for å kjøre containere
- Gravitee: Tilgang til API styres gjennom Gravitee
- RabbitMQ: Brukes for å hente meldinger angående endringer av brukere i Cerebrum
- IGA (Cerebrum): Systemet data om brukere hentes fra
- FS: Systemet data om emner hentes fra
- UiO-maskin: Overfører emnesynkroniseringsfilen fra Openshift til en Sikt-maskin
5 Relaterte systemer
- Sikt-maskin: Tar imot emnesynkroniseringsfilen