Folkeregister (FREG) integrasjon
Denne dokumentasjonen beskriver hvordan batch-applikasjonen integrerer med Folkeregisteret (FREG) for å holde persondata i FS oppdatert.
Oversikt
Folkeregister-integrasjonen er en batch-jobb som periodisk synkroniserer persondata mellom Folkeregisteret og FS. Integrasjonen håndterer tre hovedtyper av hendelser:
- Navnendringer - Oppdaterer personnavn når disse endres i Folkeregisteret
- Fødselsnummer/D-nummer endringer - Håndterer endringer i personidentifikatorer
- Dødsfall - Registrerer når personer er døde
Arkitektur
Komponenter
Folkeregister-integrasjonen består av følgende hovedkomponenter:
Scheduler
┌─────────────────────────────────────────────────┐
│ - Starter jobber med konfigurert intervall │
│ - Håndterer flere institusjoner parallelt │
└─────────────────────────┬───────────────────────┘
│
|
folkeregister.xml V
┌─────────────────────────────────────────────────┐
│ - JBeret jobb-definisjon │
│ - Parametrisert for gjenbruk │
└─────────────────────────┬───────────────────────┘
│
┌─────────────────┼─────────────────┐
V V V
Reader Processor Writer
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Les hendelser│ │ Filtrer │ │ Oppdater FS │
│ fra FREG API │ │ hendelser │ │ via GraphQL │
└──────────────┘ └──────────────┘ └──────────────┘
Jobben struktur
Jobben er definert i XML-filen src/main/resources/META-INF/batch-jobs/folkeregister.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<job xmlns="http://xmlns.jcp.org/xml/ns/javaee" id="folkeregister" version="1.0">
<properties>
<property name="eierOrganisasjonskode" value="#{jobParameters['eierOrganisjonskode']}"/>
<property name="jobbtype" value="#{jobParameters['jobbtype']}"/>
<property name="scope" value="OFFENTLIG_UTEN_HJEMMEL"/>
<property name="startdato" value="#{jobParameters['startdato']}"/>
</properties>
<step id="folkeregisterSynkroniser">
<chunk item-count="50">
<reader ref="folkeregisterItemReader"/>
<processor ref="#{jobParameters['jobbtype']}Processor"/>
<writer ref="#{jobParameters['jobbtype']}Writer"/>
</chunk>
</step>
</job>
Implementasjonsklasser
ItemReader
FolkeregisterItemReader (src/main/java/no/fellesstudentsystem/batch/folkeregister/job/FolkeregisterItemReader.java)
- Henter hendelser fra Folkeregisteret via REST API
- Bruker sekvensnummer for å holde styr på prosesserte hendelser
- Sikrer at samme jobb ikke kjører parallelt for samme institusjon
- Håndterer checkpoint/restart av jobber
Processors
Hver jobbtype har sin egen processor som filtrerer relevante hendelser:
FolkeregisterNavnProcessor- Filtrerer ut navnendringshendelserFolkeregisterFoedselsnummerProcessor- Filtrerer ut fødselsnummerendringerFolkeregisterDoedsfallProcessor- Filtrerer ut dødsfallhendelser
Writers
Hver jobbtype har sin egen writer som oppdaterer FS-plattformen:
FolkeregisterNavnWriter- Oppdaterer personnavn via GraphQLFolkeregisterFoedselsnummerWriter- Oppdaterer fødselsnummer/D-nummerFolkeregisterDoedsfallWriter- Registrerer dødsfall
Konfigurasjon
Jobbtypene konfigureres per institusjon i application.properties.
Her er et eksempel på en slik konfigurasjon:
# Eksempel konfigurasjon for institusjon 184 (UiB)
fs_batch.jobbtyper.institusjon.184 = folkeregisterFoedselsnummer,folkeregisterDoedsfall,folkeregisterNavn
# Intervall mellom kjøringer (minutter)
fs_batch.intervall_i_minutter = 30
# Startdato for nye institusjoner
fs_batch.startdato = 2024-01-01
# FREG API endpoint
folkeregister/mp-rest/url = https://folkeregisteret.api.skatteetaten.no/folkeregisteret/api/offentligutenhjemmel/v1
# Maskinporten autentisering
folkeregister.maskinporten.wellknown_url = https://maskinporten.no/
folkeregister.maskinporten.client_id = ${fs_batch_maskinporten_client_id}
folkeregister.maskinporten.kid = ${fs_batch_maskinporten_kid}
folkeregister.maskinporten.jwks = ${fs_batch_maskinporten_jwks}
Scheduler
Jobbene starter automatisk ved applikasjonsoppstart. Scheduler.java bruker konfigurasjonen til å styre når og hvor mange ganger jobbene skal kjøres.
Dataflyt
-
Hendelsesinnhenting
- ItemReader henter hendelser fra FREG API basert på sekvensnummer
- Bruker OAuth2/Maskinporten for autentisering
- Henter hendelser i batches (chunks)
-
Prosessering
- Processor filtrerer ut relevante hendelser basert på hendelsestype
- Kun hendelser som matcher jobbtypens kriterier prosesseres
-
Oppdatering
- Writer henter berørte personer fra FS-plattformen via GraphQL
- Henter oppdaterte data fra FREG for disse personene
- Oppdaterer FS-plattformen med nye data
-
Checkpoint
- Sekvensnummer lagres i database for restart-støtte
- Ved feil kan jobben restarte fra siste checkpoint
Database
Infrastruktur
Batch-applikasjonen bruker en felles PostgreSQL database som:
- Hostes av SIKT i AWS
- Deles mellom alle miljøer (dev, staging, prod)
- Er dokumentert i SIKT Platon Database dokumentasjon
- Database-credentials finnes i SIKT Vault
Tabeller
folkeregisteret_jobb- Lagrer sekvensnummer per institusjon/jobbtype- JBeret tabeller - Standard JBeret tabeller for jobbhistorikk og checkpoint
Sikkerhet
- Maskinporten: Bruker OAuth2 med JWT for autentisering mot FREG
- Scope: Bruker
OFFENTLIG_UTEN_HJEMMELfor tilgang til offentlige data - Secrets: Hemmelige nøkler lagres i Vault og injiseres som miljøvariabler
Overvåking
Logger
- Produksjon/Staging: Grafana FS-Batch Dashboard
- Lokal utvikling: Quarkus dev-konsoll (http://localhost:8080/q/dev/)
Viktige loggmeldinger
"Folkeregister jobb {jobbtype} for institusjon {kode} starter fra sekvensnummer {seq}"- Oppstart"Fant {antall} hendelser fra FREG"- Antall hendelser hentet"Oppdatert {antall} personer med nye navn"- Resultat av navneoppdatering"Ingen av hendelser var navnendring"- Når ingen relevante hendelser finnes