Ladok på LU

Om Ladok på Lunds universitet

Ladok-data i Lucat Open

Bl.a. som förberedelse inför Ladok3 kommer det att finnas viss Ladok-data i nya Lucat (IAM), som driftsätts hösten 2015. Mer info om projektet finns på deras blogg http://iam.blogg.lu.se .

Av tekniska skäl kommer all data att finnas i en och samma tabell (som därmed blir helt onormaliserad).

Nedan listas den information som finns i studentinformationen i Lucat Open, och hur den är framtagen från Ladok. Ladok-tabellerna listas var för sig. I studentinformations-tabellen är data sedan ihopsatt till en tabell, men varje rad i tabellen kommer från en källtabell från Ladok (dessa källor hämtar för all del viss data från andra tabeller, se SQL:erna nedan).

För info om fälten som finns i tabellerna kan man läsa “luEduPerson – Datamodell 0.9 – Dokumentation” som finns på IAM-sidan om teknik.

Terminer som begränsas på (står inte med nedan) är förra, befintlig och samtliga kommande.

Hur ska man tolka fälten?
Vissa fält/attribut i databasen betyder olika saker beroende på vad den raden/posten handlar om. De fält som styr detta är utbtyp + regtyp (tillsammans) enligt tabellen nedan. Oftast innebär en unik kombination av dessa styrfält vilken tabell i Ladok2 som datat är hämtat från.

Terminsnotationen är: 20161 = VT2016, 20162=HT2016, 20171=VT2017 osv.

[2017-01-28: Arbete pågår. Tabellen är inte komplett ännu.]

Vad handlar det om Termin
utbtyp=DOKT
regtyp=ANT
Antagningr till doktorandstudier Antagningsterminen
utbtyp=DOKT
regtyp=AKTIV
Aktivitet på doktorandnivå Termin för aktivitet
utbtyp=PROG
regtyp=ANT
Antagning till program Antagningsterminen
utbtyp=PROG
regtyp=ANT_SENDEL
Antagning till senare del av program Antagningsterminen
utbtyp=PROG
regtyp=FFG
Terminsregistrering på program Termin för registrering
utbtyp=PROG
regtyp=OM
Omterminsregistering på program Termin för registrering
utbtyp=KURS
regtyp=FFG
Registrering på kurs, förstagångsreg Termin för registrering
utbtyp=KURS
regtyp=OM
Omregistrering på kurs Termin för registrering
utbtyp=KURS
regtyp=FORT
Fortsättningsregistrering på kurs Termin för registrering
utbtyp=KURS
regtyp=ANT
Antagning till kurs (fristående eller inom program utan terminsregistrering) Termin för antagning
utbtyp=KURS
regtyp=VALD
Antagning till kurs (inom program med terminsregistrering) Termin för antagning
utbtyp=INRES
regtyp=DELKURS
Registrering på del av kurs (för inresande utbytesstudenter) Termin för registrering

SQL:er för datahämtning från Ladok2

Notera: Tyvärr fördärvar WordPress vissa enkelfnuttar till olika tecken, och dubbelfnutt (=två enkelfnuttar) blir grafisk dubbelfnutt.

aktivit
select ‘LU’ AS `hsk`, ‘DOKT’ AS `utbtyp`, `f`.`termin` AS `termin`, concat(`n`.`sekel`,`f`.`pnr`) AS `pnr`, `n`.`konto` AS `konto`, ‘AKTIV’ AS `regtyp`, `f`.`amne` AS `utbkod`, `fa`.`benamns` AS `utbnamn_sv`, `fa`.`benamne` AS `utbnamn_en`, ” AS `poang`, `fa`.`inst` AS `org`, ” AS `anmkod`, ” AS `kurs_progr`, ” AS `kurs_proginr`, ” AS `prog_proginr`, ” AS `termordn`, ” AS `startterm`, ” AS `prog_kull`, ” AS `prog_sendel`, ” AS `kurs_takt`, ” AS `kurs_tid`, ” AS `kurs_undform`, ” AS `kurs_ort`, ” AS `kurs_omgang`, ” AS `kurs_typ`, ” AS `kurs_startv`, ” AS `kurs_slutv`, ” AS `avbrottsdatum`, `f`.`idatum` AS `idatum`
from `lu`.`aktivit` `f`
join `lu`.`namn` `n` on `f`.`pnr` = `n`.`pnr`
join `lu`.`foamne` `fa` on `fa`.`amne` = `f`.`amne`
where (`f`.`regmark` = ‘J’) or (`f`.`procent` > 0)

ffgkurs
select ‘LU’ AS `hsk`, ‘KURS’ AS `utbtyp`, `f`.`termin` AS `termin`, concat(`n`.`sekel`,`f`.`pnr`) AS `pnr`, `n`.`konto` AS `konto`, ‘FFG’ AS `regtyp`, `f`.`kurs` AS `utbkod`, `k`.`benamns` AS `utbnamn_sv`, `k`.`benamne` AS `utbnamn_en`, `k`.`poang` AS `poang`, `k`.`inst` AS `org`, ” AS `anmkod`, `f`.`progr` AS `kurs_progr`, `f`.`proginr` AS `kurs_proginr`, ” AS `prog_proginr`, ‘ 1’ AS `termordn`, ” AS `startterm`, ” AS `prog_kull`, ” AS `prog_sendel`, `f`.`kurstakt` AS `kurs_takt`, `f`.`kurstid` AS `kurs_tid`, `f`.`undform` AS `kurs_undform`, `f`.`ort` AS `kurs_ort`, `f`.`omgang` AS `kurs_omgang`, `f`.`kurstyp` AS `kurs_typ`, ” AS `kurs_startv`, ” AS `kurs_slutv`, ” AS `avbrottsdatum`, `f`.`idatum` AS `idatum`
from `lu`.`ffgkurs` `f`
join `lu`.`namn` `n` on `f`.`pnr` = `n`.`pnr`
join `lu`.`kurs` `k` on `f`.`kurs` = `k`.`kod`

ffglin
select ‘LU’ AS `hsk`, ‘PROG’ AS `utbtyp`, `f`.`termin` AS `termin`, concat(`n`.`sekel`,`f`.`pnr`) AS `pnr`, `n`.`konto` AS `konto`, ‘FFG’ AS `regtyp`, `f`.`progr` AS `utbkod`, `l`.`benamn` AS `utbnamn_sv`, `l`.`benamne` AS `utbnamn_en`, `l`.`poang` AS `poang`, `lp`.`lokkod` AS `org`, ” AS `anmkod`, ” AS `kurs_progr`, ” AS `kurs_proginr`, `f`.`proginr` AS `prog_proginr`, `f`.`termordn` AS `termordn`, `a`.`antterm` AS `startterm`, `a`.`kull` AS `prog_kull`, `a`.`restlin` AS `prog_sendel`, ” AS `kurs_takt`, ” AS `kurs_tid`, ” AS `kurs_undform`, ” AS `kurs_ort`, ” AS `kurs_omgang`, ” AS `kurs_typ`, ” AS `kurs_startv`, ” AS `kurs_slutv`, `avb`.`datum` AS `avbrottsdatum`, `f`.`idatum` AS `idatum`
from `lu`.`ffglin` `f`
join `lu`.`namn` `n` on `f`.`pnr` = `n`.`pnr`
join `lu`.`linje` `l` on `f`.`progr` = `l`.`kod`
join `lu`.`antlin` `a` on `f`.`pnr` = `a`.`pnr` and `f`.`progr` = `a`.`progr`
left join `lu`.`avbrlin` `avb` on `avb`.`pnr` = `f`.`pnr` and `avb`.`progr` = `f`.`progr`
left join `lu`.`lokprog` `lp` on `lp`.`serie` = ‘OMR’ and `lp`.`progr` = `f`.`progr`

foant2
select ‘LU’ AS `hsk`, ‘DOKT’ AS `utbtyp`, `f`.`termin` AS `termin`, concat(`n`.`sekel`,`f`.`pnr`) AS `pnr`, `n`.`konto` AS `konto`, ‘FOANT’ AS `regtyp`, `f`.`amne` AS `utbkod`, `fa`.`benamns` AS `utbnamn_sv`, `fa`.`benamne` AS `utbnamn_en`, ” AS `poang`, `fa`.`inst` AS `org`, ” AS `anmkod`, ” AS `kurs_progr`, ” AS `kurs_proginr`, `f`.`fotyp` AS `prog_proginr`, ” AS `termordn`, ” AS `startterm`, ” AS `prog_kull`, ” AS `prog_sendel`, ” AS `kurs_takt`, ” AS `kurs_tid`, ” AS `kurs_undform`, ” AS `kurs_ort`, ” AS `kurs_omgang`, ” AS `kurs_typ`, ” AS `kurs_startv`, ” AS `kurs_slutv`, `f`.`avbrdat` AS `avbrottsdatum`, ” AS `idatum`
from `lu`.`foant2` `f`
join `lu`.`namn` `n` on `f`.`pnr` = `n`.`pnr`
join `lu`.`foamne` `fa` on `fa`.`amne` = `f`.`amne`

fortkurs
select ‘LU’ AS `hsk`, ‘KURS’ AS `utbtyp`, `f`.`termin` AS `termin`, concat(`n`.`sekel`,`f`.`pnr`) AS `pnr`, `n`.`konto` AS `konto`, ‘FORT’ AS `regtyp`, `f`.`kurs` AS `utbkod`, `k`.`benamns` AS `utbnamn_sv`, `k`.`benamne` AS `utbnamn_en`, `k`.`poang` AS `poang`, `k`.`inst` AS `org`, ” AS `anmkod`, `ffg`.`progr` AS `kurs_progr`, `ffg`.`proginr` AS `kurs_proginr`, ” AS `prog_proginr`, `f`.`termordn` AS `termordn`, `ffg`.`termin` AS `startterm`, ” AS `prog_kull`, ” AS `prog_sendel`, ” AS `kurs_takt`, ” AS `kurs_tid`, ” AS `kurs_undform`, ” AS `kurs_ort`, ” AS `kurs_omgang`, ” AS `kurs_typ`, ” AS `kurs_startv`, ” AS `kurs_slutv`, ” AS `avbrottsdatum`, `f`.`idatum` AS `idatum`
from `lu`.`fortkurs` `f`
join `lu`.`namn` `n` on `f`.`pnr` = `n`.`pnr`
join `lu`.`kurs` `k` on `f`.`kurs` = `k`.`kod`
join `lu`.`ffgkurs` `ffg` on `ffg`.`kurs` = `f`.`kurs` and `ffg`.`pnr` = `f`.`pnr`

lantkurs
select ‘LU’ AS `hsk`, ‘KURS’ AS `utbtyp`, `f`.`termin` AS `termin`, concat(`n`.`sekel`,`f`.`pnr`) AS `pnr`, `n`.`konto` AS `konto`, ‘ANT’ AS `regtyp`, `kt`.`kurskod` AS `utbkod`, `k`.`benamns` AS `utbnamn_sv`, `k`.`benamne` AS `utbnamn_en`, `k`.`poang` AS `poang`, `k`.`inst` AS `org`, `kt`.`kod` AS `anmkod`, `f`.`progr` AS `kurs_progr`, `f`.`proginr` AS `kurs_proginr`, ” AS `prog_proginr`, ” AS `termordn`, `kt`.`startter` AS `startterm`, ” AS `prog_kull`, ” AS `prog_sendel`, `kt`.`kurstakt` AS `kurs_takt`, `kt`.`kurstid` AS `kurs_tid`, `kt`.`undform` AS `kurs_undform`, `kt`.`ort` AS `kurs_ort`, `kt`.`kursomg` AS `kurs_omgang`, `kt`.`kurstyp` AS `kurs_typ`, `kt`.`startv` AS `kurs_startv`, `kt`.`slutv` AS `kurs_slutv`, ” AS `avbrottsdatum`, ” AS `idatum`
from `lu`.`lantkurs` `f`
join `lu`.`namn` `n` on `f`.`pnr` = `n`.`pnr`
join `lu`.`ktill2` `kt` on `f`.`termin` = `kt`.`startter` and `f`.`anmalt` = `kt`.`kod`
join `lu`.`kurs` `k` on `kt`.`kurskod` = `k`.`kod`
where `f`.`svar` ‘N’

lokantlb
select ‘LU’ AS `hsk`, ‘PROG’ AS `utbtyp`, `pt`.`termin` AS `termin`, concat(`n`.`sekel`,`f`.`pnr`) AS `pnr`, `n`.`konto` AS `konto`, ‘ANT’ AS `regtyp`, `pt`.`progr` AS `utbkod`, `l`.`benamn` AS `utbnamn_sv`, `l`.`benamne` AS `utbnamn_en`, `l`.`poang` AS `poang`, `lp`.`lokkod` AS `org`, `f`.`sokalt` AS `anmkod`, ” AS `kurs_progr`, ” AS `kurs_proginr`, `pt`.`proginr` AS `prog_proginr`, ‘ 1’ AS `termordn`, `pt`.`termin` AS `startterm`, `pt`.`termin` AS `prog_kull`, ‘N’ AS `prog_sendel`, ” AS `kurs_takt`, ” AS `kurs_tid`, ” AS `kurs_undform`, ” AS `kurs_ort`, ” AS `kurs_omgang`, ” AS `kurs_typ`, ” AS `kurs_startv`, ” AS `kurs_slutv`, ” AS `avbrottsdatum`, ” AS `idatum`
from `lu`.`lokantlb` `f`
join `lu`.`namn` `n` on `f`.`pnr` = `n`.`pnr`
join `lu`.`ptill` `pt` on `pt`.`anmkod` = `f`.`sokalt`
join `lu`.`linje` `l` on `pt`.`progr` = `l`.`kod`
left join `lu`.`lokprog` `lp` on `lp`.`serie` = ‘OMR’ and `lp`.`progr` = `pt`.`progr`
where `f`.`svar` ‘N’

lokantls
select ‘LU’ AS `hsk`, ‘PROG’ AS `utbtyp`, `f`.`termin` AS `termin`, concat(`n`.`sekel`,`f`.`pnr`) AS `pnr`, `n`.`konto` AS `konto`, ‘ANT_SENDEL’ AS `regtyp`, `f`.`linje` AS `utbkod`, `l`.`benamn` AS `utbnamn_sv`, `l`.`benamne` AS `utbnamn_en`, `l`.`poang` AS `poang`, `lp`.`lokkod` AS `org`, ” AS `anmkod`, ” AS `kurs_progr`, ” AS `kurs_proginr`, `f`.`inrikt` AS `prog_proginr`, `f`.`termordn` AS `termordn`, `f`.`termin` AS `startterm`, `f`.`kull` AS `prog_kull`, ‘J’ AS `prog_sendel`, ” AS `kurs_takt`, ” AS `kurs_tid`, ” AS `kurs_undform`, ” AS `kurs_ort`, ” AS `kurs_omgang`, ” AS `kurs_typ`, ” AS `kurs_startv`, ” AS `kurs_slutv`, ” AS `avbrottsdatum`, ” AS `idatum`
from `lu`.`lokantls` `f`
join `lu`.`namn` `n` on `f`.`pnr` = `n`.`pnr`
join `lu`.`linje` `l` on `f`.`linje` = `l`.`kod`
left join `lu`.`lokprog` `lp` on `lp`.`serie` = ‘OMR’ and `lp`.`progr` = `f`.`linje`
where `f`.`svar` ‘N’

omkurs
select ‘LU’ AS `hsk`, ‘KURS’ AS `utbtyp`, `f`.`termin` AS `termin`, concat(`n`.`sekel`,`f`.`pnr`) AS `pnr`, `n`.`konto` AS `konto`, ‘OM’ AS `regtyp`, `f`.`kurs` AS `utbkod`, `k`.`benamns` AS `utbnamn_sv`, `k`.`benamne` AS `utbnamn_en`, `k`.`poang` AS `poang`, `k`.`inst` AS `org`, ” AS `anmkod`, `ffg`.`progr` AS `kurs_progr`, `ffg`.`proginr` AS `kurs_proginr`, ” AS `prog_proginr`, ” AS `termordn`, `ffg`.`termin` AS `startterm`, ” AS `prog_kull`, ” AS `prog_sendel`, ” AS `kurs_takt`, ” AS `kurs_tid`, ” AS `kurs_undform`, ” AS `kurs_ort`, ” AS `kurs_omgang`, ” AS `kurs_typ`, ” AS `kurs_startv`, ” AS `kurs_slutv`, ” AS `avbrottsdatum`, `f`.`idatum` AS `idatum`
from `lu`.`omkurs` `f`
join `lu`.`namn` `n` on `f`.`pnr` = `n`.`pnr`
join `lu`.`kurs` `k` on `f`.`kurs` = `k`.`kod`
join `lu`.`ffgkurs` `ffg` on `ffg`.`kurs` = `f`.`kurs` and `ffg`.`pnr` = `f`.`pnr`

omreglin
select ‘LU’ AS `hsk`, ‘PROG’ AS `utbtyp`, `f`.`termin` AS `termin`, concat(`n`.`sekel`,`f`.`pnr`) AS `pnr`, `n`.`konto` AS `konto`, ‘OM’ AS `regtyp`, `f`.`progr` AS `utbkod`, `l`.`benamn` AS `utbnamn_sv`, `l`.`benamne` AS `utbnamn_en`, `l`.`poang` AS `poang`, `lp`.`lokkod` AS `org`, ” AS `anmkod`, ” AS `kurs_progr`, ” AS `kurs_proginr`, `f`.`proginr` AS `prog_proginr`, `f`.`termordn` AS `termordn`, `a`.`antterm` AS `startterm`, `a`.`kull` AS `prog_kull`, `a`.`restlin` AS `prog_sendel`, ” AS `kurs_takt`, ” AS `kurs_tid`, ” AS `kurs_undform`, ” AS `kurs_ort`, ” AS `kurs_omgang`, ” AS `kurs_typ`, ” AS `kurs_startv`, ” AS `kurs_slutv`, `avb`.`datum` AS `avbrottsdatum`, `f`.`idatum` AS `idatum`
from (((((`lu`.`omreglin` `f`
join `lu`.`namn` `n` on `f`.`pnr` = `n`.`pnr`
join `lu`.`linje` `l` on `f`.`progr` = `l`.`kod`
join `lu`.`antlin` `a` on `f`.`pnr` = `a`.`pnr` and `f`.`progr` = `a`.`progr`
left join `lu`.`avbrlin` `avb` on `avb`.`pnr` = `f`.`pnr` and `avb`.`progr` = `f`.`progr`
left join `lu`.`lokprog` `lp` on `lp`.`serie` = ‘OMR’ and `lp`.`progr` = `f`.`progr`

ubindrg
select ‘LU’ AS `hsk`, ‘INRES’ AS `utbtyp`, `f`.`termin` AS `termin`, concat(`n`.`sekel`,`f`.`pnr`) AS `pnr`, `n`.`konto` AS `konto`, ‘DELKURS’ AS `regtyp`, `f`.`kurs` AS `utbkod`, (case when (`f`.`kurs` != ”) then concat(`f`.`kurs`,’-‘,`f`.`prov`) else `f`.`moments` end) AS `utbnamn_sv`, (case when (`f`.`kurs` != ”) then concat(`f`.`kurs`,’-‘,`f`.`prov`) else `f`.`momente` end) AS `utbnamn_en`, `f`.`poang` AS `poang`, (case when (`f`.`kurs` != ”) then `k`.`inst` else `f`.`inst` end) AS `org`, ” AS `anmkod`, ” AS `kurs_progr`, ” AS `kurs_proginr`, ” AS `prog_proginr`, ” AS `termordn`, ” AS `startterm`, ” AS `prog_kull`, ” AS `prog_sendel`, ” AS `kurs_takt`, ” AS `kurs_tid`, ” AS `kurs_undform`, `f`.`ort` AS `kurs_ort`, `f`.`lopnr` AS `kurs_omgang`, ” AS `kurs_typ`, ” AS `kurs_startv`, ” AS `kurs_slutv`, ” AS `avbrottsdatum`, `f`.`idatum` AS `idatum`
from `lu`.`ubindrg` `f`
join `lu`.`namn` `n` on `f`.`pnr` = `n`.`pnr`
left join `lu`.`kurs` `k` on `f`.`kurs` = `k`.`kod`

valdkurs
select ‘LU’ AS `hsk`, ‘KURS’ AS `utbtyp`, `f`.`termin` AS `termin`, concat(`n`.`sekel`,`f`.`pnr`) AS `pnr`, `n`.`konto` AS `konto`, ‘VALD’ AS `regtyp`, `f`.`kurs` AS `utbkod`, `k`.`benamns` AS `utbnamn_sv`, `k`.`benamne` AS `utbnamn_en`, `k`.`poang` AS `poang`, `k`.`inst` AS `org`, ” AS `anmkod`, `f`.`progr` AS `kurs_progr`, `f`.`proginr` AS `kurs_proginr`, ” AS `prog_proginr`, `f`.`termordn` AS `termordn`, `f`.`termin` AS `startterm`, ” AS `prog_kull`, ” AS `prog_sendel`, ” AS `kurs_takt`, ” AS `kurs_tid`, ” AS `kurs_undform`, ” AS `kurs_ort`, `f`.`lperiod` AS `kurs_omgang`, `f`.`kurstyp` AS `kurs_typ`, ” AS `kurs_startv`, ” AS `kurs_slutv`, ” AS `avbrottsdatum`, `f`.`idatum` AS `idatum`
from ((`lu`.`valdkurs` `f`
join `lu`.`namn` `n` on `f`.`pnr` = `n`.`pnr`
join `lu`.`kurs` `k` on `f`.`kurs` = `k`.`kod`

Inkomna önskemål

  • Ta med studieuppehåll Det bör sig kunna göras. Visserligen behöver det tillkomma någon ny kolumn, men det kan nog göras
  • Ta med ort på omreg och fortreg I och med att kolumnerna finns där och att det ändå redan nu finns en join med ffg-tabellen så går det att lösa enkelt, även utan att involvera Advania.
  • Ta med ort på program Går även det ganska enkelt att lösa, men det kommer att finnas i KursOrt-kolumnen.
  • Ta med adresser och telefonnummer (och kanske epost) Detta får nog utredas mer. Den här datan kanske passar bättre i andra delar av nya Lucat, även om den inte finns där idag.
  • Ta med avbrott på kurs

Hur/när uppdateras data
Data synkas (i skrivande stund 2016-09-13) från Ladok kl 07 resp 15. Detta kommer att ändras till kl 11 resp 18. Det tar ca 1:30 timme för hela synkkedjan från Ladok till Lucat Open. Ändringen görs så att förmiddagens (nåja) registreringar hinner komma ut till Lucat Open och system som hämtar därifrån några timmar före arbetsdagen är slut.

HSK-kolumnen
Data finns för LU, MaH och HKR. För LU är hela innehåller i Ladok synkat, men för MaH och HKR är avgränsning gjort på de organisationer och/eller programkoder där studenterna på något sätt berör LU.

Write a comment

Din e-postadress kommer inte publiceras.