Gå til hovedinnhold

Fra FSWS-BRIS til FS GraphQL API

FSWS-BRIS er under utfasing, og funksjonaliteten er nå erstattet av FS GraphQL API. BRIS-tjenesten tilbyr studentdata til studentsamskipnader og andre systemer som trenger studentinformasjon, inkludert:

  • Henting av alle studenter (full eksport)
  • Inkrementell synkronisering basert på endringer
  • Oppslag på enkeltstudenter

Under gir vi eksempler for hvert enkelt endepunkt. GraphQL gir imidlertid stor fleksibilitet når det gjelder hvordan du henter dataene. Vi anbefaler at du bruker tid på å sette sammen spørringer som passer ditt behov.

Merk: FS GraphQL API bruker base64-enkodede sammensatte nøkler som IDer. Hvis du trenger å finne StudentVedLarested-ID fra et studentnummer eller fødselsnummer, se eksemplene under.

Oversikt over endepunkter og erstatninger

FSWS-BRIS endepunktFS GraphQL API erstatning
GET /bris/sia/alleQuery.semesterregistreringer eller Query.studenterGittStudentnumre
GET /bris/sia/alle/endringer/:timestampQuery.studenthendelser
GET /bris/sia/alle/opprettet/:timestampQuery.studenthendelser med hendelsestype STARTET_PA_STUDIEPROGRAM
GET /bris/sia/student/:studentnrQuery.studenterGittStudentnumre
GET /bris/samskipnad/studenter/endringerQuery.studenthendelser

GET /bris/sia/student/:studentnr - Hent enkelt student

For å hente data om en enkelt student basert på studentnummer, bruk studenterGittStudentnumre.

FSWS-BRIS XML-respons:

<bris_studenter>
<student>
<studentnr>12345678</studentnr>
<navn>
<fornavn>Ola</fornavn>
<etternavn>Nordmann</etternavn>
</navn>
<adresse>
<co>c/o Hansen</co>
<gate>Storgata 1</gate>
<postnr>0150</postnr>
<sted>OSLO</sted>
<land>NO</land>
</adresse>
<telefon>
<mobil>47-91234567</mobil>
<hjem>47-22334455</hjem>
</telefon>
<epost>ola@example.com</epost>
<fodselsdato>01-01-80</fodselsdato>
<dato_fodt>01-01-1980</dato_fodt>
<semesterregistrering>
<sist_bet_semavgift>20251</sist_bet_semavgift>
<fritak_semavgift>N</fritak_semavgift>
</semesterregistrering>
</student>
</bris_studenter>

FS GraphQL API spørring:

query HentStudent {
studenterGittStudentnumre(
eierOrganisasjonskode: "1234"
studentnumre: ["12345678"]
) {
studentnummer
personProfil {
navn {
fornavn
etternavn
}
fodselsdato
folkeregistrertAdresse {
co
gate
postnummerOgSted
land
}
mobilTelefon {
landnummer
nummer
}
privatTelefon {
landnummer
nummer
}
privatEpost
}
semesterregistreringer {
nodes {
termin {
arstall
betegnelse {
kode
}
}
harBetaltSemesteravgiftV2
betalingsform {
navnAlleSprak {
und
}
}
}
}
}
}

Eksempel på respons:

{
"data": {
"studenterGittStudentnumre": [
{
"studentnummer": "12345678",
"personProfil": {
"navn": {
"fornavn": "Ola",
"etternavn": "Nordmann"
},
"fodselsdato": "1980-01-01",
"folkeregistrertAdresse": {
"co": "c/o Hansen",
"gate": "Storgata 1",
"postnummerOgSted": "0150 OSLO",
"land": "Norge"
},
"mobilTelefon": {
"landnummer": "47",
"nummer": "91234567"
},
"privatTelefon": {
"landnummer": "47",
"nummer": "22334455"
},
"privatEpost": "ola@example.com"
},
"semesterregistreringer": {
"nodes": [
{
"termin": {
"arstall": 2025,
"betegnelse": {
"kode": "VAR"
}
},
"harBetaltSemesteravgiftV2": true,
"betalingsform": {
"navnAlleSprak": {
"und": "Ordinær"
}
}
}
]
}
}
]
}
}

GET /bris/sia/alle - Full eksport av alle studenter

For å hente alle studenter kan du bruke semesterregistreringer med paginering. Dette gir deg tilgang til alle semesterregistrerte studenter.

Viktige forskjeller:

  • GraphQL bruker cursor-basert paginering
  • Du må hente data i batches ved å bruke after og first parametere
  • Responsen er JSON i stedet for XML-strøm

Eksempel på spørring:

query HentAlleStudenter($after: String) {
semesterregistreringer(
filter: {
eierOrganisasjonskode: "1234"
terminkoder: [{ arstall: 2025, betegnelse: VAR }]
harBetaltSemesteravgift: true
}
first: 100
after: $after
) {
pageInfo {
hasNextPage
endCursor
}
totalCount
nodes {
student {
studentnummer
personProfil {
navn {
fornavn
etternavn
}
fodselsdato
folkeregistrertAdresse {
co
gate
postnummerOgSted
land
}
mobilTelefon {
landnummer
nummer
}
privatEpost
}
semesterregistreringIInnevarendeSemester {
harBetaltSemesteravgiftV2
erSemesterregistrert
}
}
}
}
}

For å hente alle studenter, gjør gjentatte kall med after satt til endCursor fra forrige respons, inntil hasNextPage er false.

GET /bris/sia/alle/endringer/:timestamp - Inkrementell synkronisering

For å hente studenter som er endret siden et gitt tidspunkt, bruk studenthendelser. Dette gir deg et hendelsesbasert system som er mer presist enn timestamp-basert filtrering.

Viktige forskjeller:

  • Hendelsesbasert i stedet for timestamp-basert
  • Du kan filtrere på spesifikke hendelsestyper
  • Gir mer presis informasjon om hva som er endret

Relevante hendelsestyper for BRIS-data:

  • ENDRET_NAVN - Navneendring
  • ENDRET_FOLKEREGISTRERT_ADRESSE - Folkeregistrert adresse endret (tilsvarer hjemstedsadresse i BRIS)
  • ENDRET_POSTADRESSE - Postadresse endret
  • ENDRET_MOBILNUMMER - Mobilnummer endret
  • ENDRET_EPOSTADRESSE - E-post endret
  • SEMESTERREGISTRERT - Student har semesterregistrert seg
  • SEMESTERREGISTRERING_UGYLDIGGJORT - Semesterregistrering ugyldiggjort
  • SEMESTERREGISTRERING_STATUS_BET_OK - Semesteravgift betalt
  • STARTET_PA_STUDIEPROGRAM - Student startet på studieprogram
  • SLUTTET_PA_STUDIEPROGRAM - Student sluttet på studieprogram

Eksempel på spørring:

query HentStudentendringer($after: String) {
studenthendelser(
filter: {
eierOrganisasjonskode: "1234"
hendelsestype: [
ENDRET_NAVN
ENDRET_FOLKEREGISTRERT_ADRESSE
ENDRET_MOBILNUMMER
ENDRET_EPOSTADRESSE
SEMESTERREGISTRERT
SEMESTERREGISTRERING_STATUS_BET_OK
]
}
first: 100
after: $after
) {
pageInfo {
hasNextPage
endCursor
}
nodes {
hendelsestype
tidspunkt
student {
studentnummer
personProfil {
navn {
fornavn
etternavn
}
folkeregistrertAdresse {
co
gate
postnummerOgSted
land
}
mobilTelefon {
landnummer
nummer
}
privatEpost
}
semesterregistreringIInnevarendeSemester {
harBetaltSemesteravgiftV2
erSemesterregistrert
}
}
}
}
}

Eksempel på respons:

{
"data": {
"studenthendelser": {
"pageInfo": {
"hasNextPage": true,
"endCursor": "eyJjdXJzb3IiOiIxMjM0NTY3ODkwIn0="
},
"nodes": [
{
"hendelsestype": "SEMESTERREGISTRERT",
"tidspunkt": "2025-01-15T10:30:00Z",
"student": {
"studentnummer": "12345678",
"personProfil": {
"navn": {
"fornavn": "Ola",
"etternavn": "Nordmann"
},
"folkeregistrertAdresse": {
"co": null,
"gate": "Storgata 1",
"postnummerOgSted": "0150 OSLO",
"land": "Norge"
},
"mobilTelefon": {
"landnummer": "47",
"nummer": "91234567"
},
"privatEpost": "ola@example.com"
},
"semesterregistreringIInnevarendeSemester": {
"harBetaltSemesteravgiftV2": true,
"erSemesterregistrert": true
}
}
}
]
}
}
}

Les mer om hendelser her: FS GraphQL API: Hendelser

GET /bris/samskipnad/studenter/endringer - Samskipnad-eksport

Dette endepunktet returnerer studenter basert på to kriterier:

  1. Studenter med ny studierett - fra Studieprogramstudent hvor:

    • Studierett tildelt innen siste 60 dager (eller siden siste kjøring)
    • Studierett er gyldig (ikke utløpt)
    • Studentstatus er aktiv (Status_Aktiv_Student = 'J')
  2. Studenter som har betalt semesteravgift - fra Registerkort hvor:

    • Betaling OK (Status_Bet_OK = 'J')
    • Inneværende semester
    • Betalingsdato etter siste kjøring (for inkrementell eksport)

For å oppnå tilsvarende funksjonalitet i GraphQL, bruk studenthendelser med relevante hendelsestyper:

Eksempel på spørring for samskipnader:

query HentSamskipnadEndringer($after: String) {
studenthendelser(
filter: {
eierOrganisasjonskode: "1234"
hendelsestype: [
STARTET_PA_STUDIEPROGRAM
PROGRAM_STUDIERETT_OPPRETTET
SEMESTERREGISTRERING_STATUS_BET_OK
]
}
first: 100
after: $after
) {
pageInfo {
hasNextPage
endCursor
}
nodes {
hendelsestype
tidspunkt
student {
studentnummer
personProfil {
navn {
fornavn
etternavn
}
fodselsdato
folkeregistrertAdresse {
co
gate
postnummerOgSted
land
}
}
programStudieretter(filter: { erAktiv: true }) {
nodes {
studierettperiode {
fraDato
tilDato
}
studentstatus {
kode
girAktivStudierett
}
}
}
semesterregistreringIInnevarendeSemester {
harBetaltSemesteravgiftV2
erSemesterregistrert
betaltSemesteravgiftDato
}
}
}
}
}

Viktig: BRIS-endepunktet returnerer også følgende data:

  • Sist betalte semesteravgift (år + terminkode)
  • Om studenten har fritak fra semesteravgift
  • Registreringsstatus
  • Stedskode (basert på stemmerettighet)

Disse dataene kan hentes via semesterregistreringer og programStudieretter i GraphQL.

Feltmapping: FSWS-BRIS til FS GraphQL API

FSWS-BRIS feltFS-database (kilde)FS GraphQL API felt
studentnrStudent.Studentnr_TildeltStudentVedLarested.studentnummer
navn/fornavnPerson.FornavnPersonProfil.navn.fornavn
navn/etternavnPerson.EtternavnPersonProfil.navn.etternavn
adresse/coPerson.Adrlin1_HjemstedPersonProfil.folkeregistrertAdresse.co
adresse/gatePerson.Adrlin2_HjemstedPersonProfil.folkeregistrertAdresse.gate
adresse/postnrPerson.Postnr_HjemstedPersonProfil.folkeregistrertAdresse.postnummerOgSted (inneholder postnr + sted)
adresse/stedPerson.Adrlin3_Hjemsted (sted ekstrahert)PersonProfil.folkeregistrertAdresse.postnummerOgSted (inneholder postnr + sted)
adresse/landPerson.Adresseland_HjemstedPersonProfil.folkeregistrertAdresse.land
telefon/mobilPersonTelefon (MOBIL)PersonProfil.mobilTelefon.nummer + landnummer
telefon/hjemPersonTelefon (HJEM)PersonProfil.privatTelefon.nummer + landnummer
epostPerson.EmailadressePersonProfil.privatEpost
fodselsdatoStudent.Fodselsdato (format: DD-MM-YY)PersonProfil.fodselsdato (ISO 8601: YYYY-MM-DD)
dato_fodtPerson.Dato_Fodt (format: DD-MM-YYYY)PersonProfil.fodselsdato (ISO 8601: YYYY-MM-DD)
semesterregistrering/sist_bet_semavgiftRegisterkort.Arstall + TerminkodeSemesterregistrering.termin.arstall + termin.betegnelse.kode
semesterregistrering/fritak_semavgiftRegisterkort.Betformkode = 'FRITATT'Semesterregistrering.betalingsform (sjekk type)

Alternative oppslag

Oppslag basert på fødselsnummer

Hvis du har fødselsnummer i stedet for studentnummer:

query HentStudentMedFodselsnummer {
studenterGittFodselsnumre(
eierOrganisasjonskode: "1234"
fodselsnumre: ["01018012345"]
) {
studentnummer
personProfil {
navn {
fornavn
etternavn
}
fodselsdato
}
}
}

Kontakt oss for hjelp ved behov

Kontakt kontakt@sikt.no dersom du trenger hjelp til å komme i gang, eller underveis i migreringen.