Advarsel
Dette dokumentet er work in progress.
Bakgrunn
Prosjektet BOTT-ØL har innført nytt system for økonomi og lønn ved BOTT-universitetene, og UiO har byttet over til dette systemet.
Registrering av gjester, gjesteroller, og vedlikehold av brukerkonto og tilganger har blitt et problem etter overgangen. For å utbedre blir det laget en ny løsning for registrering av gjester og gjesteroller i BOTT - Greg.
For å bygge brukerkonto til gjester, må det utvikles en integrasjon mellom Greg og Cerebrum.
Gjester og gjesteroller
Roller: https://www.uio.no/for-ansatte/arbeidsstotte/lonnsadministrasjon/gjest.html#roller
- Emeritus → TILKNYTTET/emeritus
- Gjesteforsker → TILKNYTTET/gjesteforsker
- Ekstern konsulent → TILKNYTTET/ekst_partner
- Ekstern parner → TILKNYTTET/ekst_partner
Oppsummering
- Import av orgreg-id til Cerebrum
- Import av person-data fra Greg til Cerebrum
- "Ansattautomatikk" for gjester
Greg
Meldinger
Greg sender meldinger hver gang noe relevant endres, og sender også melding når eventuelle start- eller sluttdatoer inntreffer for f.eks. roller.
Meldinger følger CloudEvents 1.0.1.
Kode for generering av melding: https://git.app.uib.no/it-bott-integrasjoner/greg/-/blob/master/greg/management/commands/start_notification_publisher.py#L43
Eksempel-meldinger:
{"specversion": "1.0", "id": "27", "source": "urn:greg:local:person:4", "type": "no.local.greg.person.add"} {"specversion": "1.0", "id": "28", "source": "urn:greg:local:person:4", "type": "no.local.greg.person.update"} {"specversion": "1.0", "id": "26", "source": "urn:greg:local:person:2", "type": "no.local.greg.person.delete"} {"specversion": "1.0", "id": "29", "source": "urn:greg:local:identity:6", "type": "no.local.greg.identity.add", "data": {"person_id": 4}} {"specversion": "1.0", "id": "31", "source": "urn:greg:local:identity:5", "type": "no.local.greg.identity.delete", "data": {"person_id": 3}} {"specversion": "1.0", "id": "37", "source": "urn:greg:local:role:3", "type": "no.local.greg.role.add", "data": {"person_id": 3}} {"specversion": "1.0", "id": "38", "source": "urn:greg:local:role_type:2", "type": "no.local.greg.role_type.add"} {"specversion": "1.0", "id": "39", "source": "urn:greg:local:role:3", "type": "no.local.greg.role.update", "data": {"person_id": 3}}
Notat
Vi bør nok unngå å bruke urn:greg - det er ikke et navnerom som vi eier.
Har diskutert med ~jbr, og dette blir sannsynligvis endret til å være app-spesifikk identifikator (f.eks. path til objekt - /person/4), evt. lignende verdi som i dag, uten urn:-prefiks.
API
OpenAPI-dokuemntasjon fra testmiljø: https://greg-uio-test.uio.no/schema/swagger-ui/
Relevante endepunkter:
- GET /api/v1/person/{id} - Persondata for en person-id fra Greg
- GET /api/v1/person/ - Utlisting av alle personer, f.eks. til fullsync
- GET /api/v1/orgunit/{id} - OU-data for en ou-id fra Greg. Kan brukes for å f.eks. mappe ou-id i roller til orgreg_id - dette trengs muligens ikke
Viktig
Roller refererer til en intern Greg-id for OU-er. Må pdd. slåes opp via API for å hente ut orgreg-id som vi kan mappe til intern OU i Cerebrum.
Mulig vi får en orgreg_id direkte i rolle-objektet.
Import
Importen følger i hovedsak designet til DFØ-integrasjonen, men uten å gjenbruke moduler fra Cerebrum.modules.hr-import.
Greg-integrasjonen bør også tettere følge den opprinnelige planen fra DFØ-importen, om separasjon mellom komponenter:
- datasource: parsing og validering av data fra kildesystemet (greg)
- mapper: filtrering/utplukk av data (f.eks. velge å bruke identity norwegian_national_id_number som external-id NO_BIRTHNO i Cerebrum)
- importer: skrive informasjon levert av mapper til database
Flyt
Mottakk av melding.
Dette gjøres likt som i DFØ-import. En egen prosess (muligens den samme som hr-import?) lytter etter meldinger, parser melding til tasks, som legges inn i en egen task-kø.
Import/sync av persondata.
En egen jobb kjører regelmessig for å behandle task-kø. Denne kan f.eks. kjøre hvert 10. minutt.
Importen må:
- Slå opp persondata i Greg
- Ut fra resultat, finne ut om dette skal ignoreres eller føre til oppretting, oppdatering, eller avvikling av et personobjekt.
- Utføre den relevante endringen (se persondata)
Opprette brukerkonto.
En regelmessig jobb kjører gjennom og oppretter brukerkonto til gjester, tilsvarende som ansatt-automatikk.
Utplukk
Cerebrum skal kun importere og vedlikeholde personer fra Greg som er gyldig gjest. Dette betyr at vi kun oppretter/oppdaterer person-objekt i Cerebrum dersom Greg kan presentere:
- Minimum en gyldig, aktiv rolle. En gyldig rolle er en rolle som kan mappes til en tilknytningstype i Cerebrum. En aktiv rolle har start_date i fortid og end_date i fremtid.
- registration_completed_date må være satt (og ikke en fremtidig dato).
- Ved oppretting - minimum ett gyldig id-nummer. Aksepterte id-nummer er norwegian_national_id_number og passport_number. For at id-nummeret skal være gyldig, må det være verified (manual eller automatic).
- Person må også ha enkelte samtykker (godta personvern-policy, godta it-reglement), men dette vil ivaretaes i Greg. Det skal ikke være nødvendig for Cerebrum å kontrollere at disse er gitt.
Persondata
Personer fra Greg må oppdateres/vedlikeholdes med:
- Fødselsdato
- Hentes fra date_of_birth. Settes kun ved oppretting av person.
- Kjønn
- Finnes ikke i Greg, men er påkrevd i Cerebrum. Kan settes til X (gender_unknown) ved oppretting.
- Tilknytning
- Regnes ut fra personens roller (roles).
- Ekstern ID
- Må sette GREG_PID (externalid_greg_pid) fra id. Må sette/oppdatere NO_BIRTHNO og/eller PASSNR fra personens identifikatorer (identities)
- Kontaktinfo
- Vi må oppdatere PRIVATEMOBILE fra Greg. Mobilnummer hentes fra identities[type == private_mobile]. Kontaktinfo krever ikke en verified-verdi.
- Samtykke
Vi må oppdatere samtykke til publisering av personinformasjon i katalog-tjenester, consents[].type[identifier == publish]).
I første omgang: Melde inn i gruppe Greg-aktivt-samtykke.
TODO: Hvordan representere samtykker fra eksterne systemer? Vi må finne en bedre løsning som gjør at vi ikke trenger å sjekke tilknytninger, kildesystem og gruppemedlemsskap ved eksport.
Avvikling
Dersom en person ikke lenger er gyldig gjest i Greg, må Greg-relaterte data fjernes i Cerebrum.
Utplukk er ulikt fra oppretting. Person skal avvikles dersom ingen gyldig, aktiv rolle lenger finnes i Greg. Dersom andre kriterier for oppretting (fødselsnummer, passnummer, registration_completed_date) forsvinner, skal vi likevel oppdatere og vedlikeholde persondata, så lenge det finnes en gyldig, aktiv rolle.
Fjerne:
- Tilknytninger fra greg
- Ekstern-id fra greg, bortsett fra GREG_PID.
- Kontaktinfo fra greg
- Samtykker
- Navn (kildesystem GREG, evt. navn fra greg som har blitt brukt i Cached kan beholdes)
Samtykke
Greg har pdd. tre typer samtykke:
- IT-reglement (ikke direkte relevant for Cerebrum - registrering er ikke fullført før dette blir gitt)
- Personvern-policy (ikke direkte relevant for Cerebrum - registrering er ikke fullført før dette blir gitt)
- Publisering av personinformasjon - dette må vi representere og vedlikeholde i Cerebrum, og bry oss om i ulike eksporter.
Vi får enda en samtykke-kilde som må blandes inn med samtykke fra FS og reservasjon fra HR-system.
Brukerkonto
Vi må ha automatisk (gjen-)oppretting av brukerkonto for gjester. Det betyr at:
- Nye personobjekter fra Greg (samt personobjekter som aldri har hatt noen brukerkonto) skal automatisk få opprettet en brukerkonto.
- Eksisterende personer med brukerkonto skal få denne automatisk gjenopprettet, så langt det er mulig (typisk unntak: personer med flere brukerkontoer?)
Implementasjon
Greg-relatert funksjonalitet samles i en Cerebrum.modules.greg:
Forhåndsarbeid
OU-import må utvides til å inkludere og oppdatere ou-id fra OrgReg.
Meldinger og tasks
Meldinger kan mottas, parses og omformes til tasks ved bruk av consumers/consume-tasks.py, i samarbeid med:
- Cerebrum.modules.greg.datasource
- Modul for konvertering av data fra Greg - her bør det implementeres en funksjon for å parse relevante data fra meldinger i Greg
- Cerebrum.modules.greg.tasks
- Modul som implementerer/definerer task-køer for Greg. Her bør det implementeres tilsvarende funksjonalitet som i f.eks. Cerebrum.modules.no.dfo.tasks.
Sluttresultatet er en funksjon som kan legges inn i konfigurasjonen til consume-tasks.py, og omforme meldinger til tasks fortløpende.
Import
- Cerebrum.modules.greg.mapper
- Bør inneholde mapping fra Greg-spesifikke data til Cerebrum-spesifikke data. F.eks. at role.type: "foo" skal bli til TILKNYTTET/foo i Cerebrum, og at norwegian_national_id_number er NO_BIRTHNO i Cerebrum.
- Cerebrum.modules.greg.importer
- Funksjonalitet som tar informasjon, ferdig pre-prosessert fra mapper, og skriver dette til Cerebrum.
Automatisk oppretting av brukerkonto
TODO