Integrasjon mellom Greg og Cerebrum

Formålet med dette dokumentet er å presentere løsningsforslag til integrasjon mellom nytt system for registrering av gjester (Greg) og Cerebrum.

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

  1. Import av orgreg-id til Cerebrum
  2. Import av person-data fra Greg til Cerebrum
  3. "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

  1. 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ø.

  2. 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)
  3. 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

Av fhl
Publisert 26. nov. 2021 12:17 - Sist endret 27. jan. 2022 11:43