CSC:ltä (Korkeakoulujen tietovaranto - VIRTA) saatavien tietojen tiedosto- ja tietuekuvaus 1.9.2018 alkaen.
Alarajapäivä
Opintopisteet1
Opintopisteet2
Tietuekuvaus (taulukko)
Virta poiminta
Huomioitavaa että Kelan edistymisenseurannassa poimitaan myös opintopisteet opintosuorituksista jossa on Virta opintosuorituslajin 3 (="ei huomioitava, osasuoritus vain Kelaa varten").
Korkeakouluilla tarkoitetaan suomalaisia korkeakouluja.
CSC täydentää Kelan muodostamaan pyyntötiedostoon kustakin siinä olevasta opiskelijasta (yksi tietue opiskelijaa kohden) seuraavat VIRTA-opintotietopalvelusta poimittavat tiedot:
- Alarajapäivä: Korkeakouluopintojen aloituspäivä
Tarkentavat ehdot:
korkeakouluopintoja ovat tutkintoon johtavat suomalaisen korkeakoulun opinnot
Aloituspäiväksi ei saa ilmoittaa muun kuin tutkintoon johtavan koulutuksen aloituspäivää eikä avoimen korkeakoulun opintojen aloituspäivää eikä Maanpuolustuskorkeakoulun aloituspäivää.
aloituspäivä on ensimmäisen läsnäololukukauden ensimmäinen päivä (1.8. tai 1.1.), siirto-opiskelijoilla 1. korkeakoulun mukainen läsnäololukukauden ensimmäinen päivä
Vaikka opiskelijalla olisi useita opiskeluoikeuksia, aloituspäivä määräytyy ensimmäisen tutkintoon johtavan läsnäolon mukaan (ellei valmistu, ks. ehto c.)
jos opiskelija on valmistunut aloituspäiväksi poimitaan viimeisimmän valmistumisen valmistumiskuukautta seuraavan kuukauden ensimmäinen päivä. Myös Maanpuolustuskorkeakoulussa tehty tutkinto huomioidaan. Huom. muiden kuin yllämainittujen tutkintoon johtavien koulutusten valmistumista ei huomioida valmistumisena (Kelassa P ja E tutkinnontasot).
Esim. opiskelijan tutkinnon suorittamispäivä on 14.3.2018. Ilmoitettava aloituspäivä on 1.4.2018.
Esim. opiskelijan tutkinnon suorittamispäivä ammattikorkeakoulussa 14.3.2018, jonka jälkeen opiskelija on suorittanut erillisen ylemmän korkeakoulututkinnon (erillinen maisteri) 30.9.2020. Vuonna 2021 toteuttavassa lv. 2020 – 2021 edistymisen seurannassa ilmoitettava aloituspäivä on 1.10.2020.
Jos henkilö on valmistunut kuluvan vuoden heinäkuussa, ilmoitettava aloituspäivä 1.8.kuluva vuosi.
aloituspäivä ei saa olla aikaisempi kuin 1.8.2011 (jos on aikaisempi, ilmoitetaan 1.8.2011)
Esim. jos opiskelija on aloittanut opintonsa 1.8.2009, ilmoitettavaaloituspäivä on 1.8.2011.
Opintopisteet1: Koko opiskeluajan opintopisteiden määrä kaikista korkeakouluista (myös avoimen korkeakoulun suoritukset poimitaan)
Tarkentavat ehdot:
jos aloituspäivä (alarajapäivä) on tyhjä tai myöhempi 31.7. kuluva vuosi, opintopisteitä ei ilmoiteta (tieto on tyhjää)
koko opiskeluajan opintopisteillä tarkoitetaan korkeakouluopintojen aloituspäivän (määrittely kohdassa 1) ja seurantalukuvuoden lopun (31.7.20xx) välillä suoritettuja opintopisteitä
- opintopisteet huomioidaan suorituspäivän mukaan
jos suorituksella on VIRTA-opintotietopalvelussa hyväksi lukemisen päivämäärä toisessa kotimaisessa korkeakoulussa tehdystä suorituksesta, niin ko. suoritusta ei huomioida lainkaan. Mahdollisesti toisessa korkeakoulussa hyväksi luetut suoritukset huomioidaan alkuperäisen suorituspäivämäärän perusteella sen ajan suoritukseksi, milloin suoritus on tehty.
Toisen asteen, kesäyliopiston, kansanopiston, ulkomaisen oppilaitoksen tms. hyväksi luettu suoritus huomioidaan, jos alkuperäinen suorituspäivä on korkeakouluopintojen ajalta (eli alarajapäivän jälkeen).
Niitä hyväksi luettuja opintosuorituksia, jotka on suoritettu ennen tutkintoon tähtäävien korkeakouluopintojen aloittamista (ennen alarajapäivää), ei ilmoiteta lainkaan.
Opintopisteet2: Seurantalukuvuoden opintopisteiden määrä kaikista korkeakouluista (myös avoimen korkeakoulun suoritukset poimitaan)
Tarkentavat ehdot:
Jos aloituspäivä (alarajapäivä) on tyhjä tai myöhempi 31.7., opintopisteitä ei ilmoiteta (tieto on tyhjää)
seurantalukuvuosi on seurannan toteutusta edeltävä lukuvuosi 1.8.20xx – 31.7.20xx tai jos henkilö on valmistunut seurantalukuvuonna, niin seurantakausi on valmistumiskuukautta seuraavan kuukauden 1. päivä (alarajapäivä) –31.7.20xx
- opintopisteet huomioidaan suorituspäivän mukaan
jos suorituksella on VIRTA-opintotietopalvelussa hyväksi lukemisen päivämäärä toisessa kotimaisessa korkeakoulussa tehdystä suorituksesta, niin ko. suoritusta ei huomioida lainkaan. Mahdollisesti toisessa korkeakoulussa hyväksi luetut suoritukset huomioidaan alkuperäisen suorituspäivämäärän perusteella sen ajan suoritukseksi, milloin suoritus on tehty.
Toisen asteen, kesäyliopiston, kansanopiston, ulkomaisen oppilaitoksen tms. hyväksi luettu suoritus huomioidaan, jos alkuperäinen suorituspäivä on korkeakouluopintojen ajalta (eli alarajapäivän jälkeen).
Niitä hyväksi luettuja opintosuorituksia, jotka on suoritettu ennen tutkintoon tähtäävien korkeakouluopintojen aloittamista (ennen alarajapäivää), ei ilmoiteta lainkaan.
Esim. kurssin suorituspvm. on 2.5.2017 ja hyväksi lukemisen pvm. 20.9.2017. Ko. kurssin opintopisteet ilmoitetaan lv. 2016 – 2017 edistymisen seurannassa seurantalukuvuodelle (on mukana sekä Opintopisteet1 ja Opintopisteet2 tiedossa), mutta ei enää lv. 2017 – 2018 seurantalukuvuodelle (on mukana vain Opintopisteet1 tiedossa).
Alkuun
Tietuekuvaus (taulukko)
CSC:ltä (Korkeakoulujen tietovaranto - VIRTA) saatavien tietojen tiedosto- ja tietuekuvaus 1.9.2018 alkaen.
Tätä tietuekuvausta käytetään opiskelun edistymisen seurantaan tarvittavassa tietojenvälityksessä sekä Kelasta CSC:lle (VIRTAan) ja CSC:ltä (VIRTAsta) Kelaan.
Tiedon nimi | Sijainti | Pituus | Kuvaus |
---|
Siirtotunnus | 1 | 15 | Tiedoston siirtotunnus - Kela ilmoittaa (vakio), CSC ei päivitä - vakio ’SOSOVP’ - loppuosa tyhjää - pakollinen |
Tietuetyyppi | 16 | 1 | T = opintosuoritustietue - Kela ilmoittaa (vakio), CSC ei päivitä - pakollinen |
Poimintapäivämäärä | 17 | 8 | PPKKVVVV - Kela ilmoittaa, CSC päivittää - poiminta-ajon ajopäivämäärä CSC:llä - etunollat PP:ssä ja KK:ssa esim. 20092018 - pakollinen |
Siirtolaji | 25 | 5 | Siirtoerän siirtolaji - Kela ilmoittaa (vakio), CSC ei päivitä - vakio ’OPVII’ - pakollinen |
Lähettäjäryhmän tunnus | 30 | 2 | Lähettäjäryhmän tunnus - Kela ilmoittaa (vakio), CSC ei päivitä - vakio ’OP’ - pakollinen |
Varatila | 32 | 8 | Tyhjää |
Henkilötunnus | 40 | 11 | PPKKVVZNNNX - Kela ilmoittaa, CSC ei päivitä - pakollinen tieto, esim. 010101A000X |
Sukunimi | 51 | 30 | Opiskelijan sukunimi - Kela ilmoittaa, CSC ei päivitä - nimitiedot virheselvittelyä varten - pakollinen |
Etunimet | 81 | 30 | Opiskelijan etunimet - Kela ilmoittaa, CSC ei päivitä - nimitiedot virheselvittelyä varten - pakollinen |
Alarajapäivä | 111 | 8 | PPKKVVVV - opintosuoritusten seuranta-ajan alkupäivä (koko opiskeluajan alkupäivä) ks. ehdot muistiosta - CSC päivittää - etunollat PP:ssä ja KK:ssa, esim. 01082015 |
Ylärajapäivä | 119 | 8 | PPKKVVVV - Kela ilmoittaa, CSC ei päivitä - opintosuoritusten seuranta-ajan loppupäivä, jonka Kela päivittää pyyntötiedostoon valmiiksi - etunollat PP:ssä ja KK:ssa, esim. 31072018 - pakollinen |
Opintopisteet1 | 127 | 3 | Em. rajapäivämäärien välisenä aikana (koko opiskeluaikana) suoritettujen opintopisteiden määrä ks. ehdot muistiosta - CSC päivittää - kokonaislukuna (pyöristyssääntö), tyhjä sallittu - täytetään etunollilla, esim. 000, 005, 096 |
Varatila | 130 | 3 | Tyhjää |
Opintopisteet2 | 133 | 3 | Kertyneet opintopisteet edeltävänä lukuvuotena (seurantalukuvuosi) ks. ehdot muistiosta - CSC päivittää - kokonaislukuna (pyöristyssääntö), tyhjä sallittu - ei saa olla suurempi kuin opintopisteet1 - täytetään etunollilla, esim. 000, 005, 096 |
Varatila | 136 | 65 | Tyhjää |
Yleistä
Kelaan lähetettävien tietojen muodollinen oikeellisuus on tarkistettava CSC:ssä ennen tietojen lähettämistä. Asiasisällön osalta oppilaitos vastaa siitä, että tiedot ovat VIRTA-opintotietopalvelussa mahdollisimman ajantasaiset.
Tietueen pituus pitää olla aina 200 merkkiä. Jokaisen tietueen on oltava omalla rivillään. Tiedoston pitää olla ISO 8859-1 standardin mukainen.
Alkuun
Virta poiminta
Yleiset perustiedot
CSC toimittaa Kelalle vuosittain edistymisenseurannan tulokset ns. vastaustiedostona Kelan lähettämään pyyntötiedostoon. Edistymisen seuranta tehdään Kelan korkeakouluille ilmoittaman aikataulun mukaisesti. Opiskelijoiden opintopisteet lasketaan Kelan ilmoittaman määrittelyn mukaisesti Virta-tietovarannosta, jossa suoritetaan lopullinen laskenta sovituna poimintahetkenä, sen hetken Virta-tietojen mukaan. Korkeakoulujen vastuulla on toimittaa ajantasaiset tiedot Virtaan ajoissa ennen lopullista laskentaa. Kela käyttää näitä laskennan tuloksia massa-ajoihin, joilla seurataan opintotukea saaneiden opiskelijoiden edistymistä nostettuun opintotukikuukausiin nähden. Vuodesta 2018 lähtien edistymisen seurannan tiedoista ei enään muodosteta korkeakouluille omien opiskelijoiden seurantaa varten korkeakoulukohtaisia tarkistustiedostoja.
Kaikki alla olevissa poimintalauseissa olevat taulut ovat sisäisiä tietovarannon kaikkien korkeakoulujen tietoja sisältäviä tauluja (yleistasolla on mahdollisuksien mukaan yritetty kuvata mitä taulut sisältävät). Kelan pyyntötiedoston opiskelijat on aluksi luettu tauluun, jotka muodostavat opiskelijajoukon, joiden tiedot kuuluvat edistymisen seurannan piiriin. Vain näiden opiskelijoiden tietoja käsitellään poiminnassa.
Ne pyyntötiedoston opiskelijat, joita henkilötunnuksen avulla ei löydy Virta-tietovarannosta, jäävät päivittämättä Kelalle lähetettävään vastaustiedostoon ja käsitellään Kelan toimesta erillistapauksina.
Alarajapäivä = Aloituspäivä = Korkeakouluopintojen aloituspäivä (tutkintoon johtavan koulutuksen aloituspäivä) .
Aloituspäivä on ensimmäisen läsnäololukukauden ensimmäinen päivä (1.8. tai 1.1.) siirto-opiskelijoilla 1. korkeakoulun mukainen läsnäololukukauden ensimmäinen päivä.
Jos seurannassa oleva opiskelija on valmistunut, niin aloituspäiväksi poimitaan viimeisimmän valmistumisen valmistumiskuukautta seuraavan kuukauden ensimmäinen päivä. Muiden kuin tutkintoon johtavien koulutusten valmistumista ei huomioida valmistumisena.
KELAEDSE = kopio virta tietokannasta
KELA = kela kanta jossa tulokset käsitellään ja tallennetaan
kela.dbo.kela_edistymisen_tiedot_yhteen = seurattavat opiskelijat (hetut, nimet) vuoden edistymisenseurannassa
kela.dbo.kela_edistymisen_valmistuneet = opiskelijat jotka valmistuneet (tutkintoon)
kela_edistymisen_viimeisin_valmistumispvm = Viimeisin valmistuminen mistä tahansa korkeakoulusta
kela.dbo.kela_aikaisin_aloituspvm = laskettu alarajapäivämäärä opiskelijalle joka ei ole vielä valmistunut
kela.dbo.kela_opintopisteet_poimittu_per_hetu = laskettu opintopisteet seurantaajalle
rivinro = rivinro pyyntötiedostossa
Valmistuneet (=>alarajapäivä)
Poimitaan kaikki edistymisen seurannan joukosta valmistuneet. Aloituspäivä määräytyy silloin ylläolevan mukaan eli valmistumisesta seuraavan kuukauden ensimmäinen päivä.
CREATE TABLE #kelaopiskelija (
rivinro int,
kk varchar(12),-- korkeakoulu
ht varchar(11),--Henkilötunnus
kirtu date,--Kirjoihintulopvm
opevuosi float, --yhteensä viime lukuvuonna (esim. 1.8.2018 - 31.7.2019)
opeyhteensa float,
opoik date,--Opiskeluoikeuden alkaminen nykyisessä tutkinnossa
koulk varchar(6),--Koulutuskoodi
opiskelijaavain varchar(100),
opiskeluoikeusavain varchar(100),
opiskelija_id int,
opiskeluoikeus_id int,
aloituspvm varchar(10), -- KELA alarajapäivä string
aloituspvm_datum date -- KELA alarajapäivä date
)
-- Valmistunut joskus jostain, tutkintosuoritus, tutkintoon johtava opiskeluoikeus
INSERT INTO #kelaopiskelija (rivinro, ht, kk, opiskelija_id, opiskelijaavain)
SELECT DISTINCT Y.rivinro, H.Henkilotunnus, H.db, O.id, O.Avain
FROM kela.dbo.kela_edistymisen_tiedot_yhteen Y
JOIN KELAEDSE.dbo.Henkilo H ON H.henkilotunnus = Y.henkilotunnus
JOIN KELAEDSE.dbo.Opiskelija O ON O.henkiloid = H.id
JOIN KELAEDSE.dbo.Opiskeluoikeus OO ON OO.OpiskelijaID = O.ID
JOIN KELAEDSE.dbo.Opiskeluoikeuden_tyyppi OT ON OT.ID = OO.Op_oikeuden_tyyppiID
JOIN KELAEDSE.dbo.Opintosuoritus OS ON OS.OpiskelijaID = O.id AND OO.ID = OS.OpiskeluoikeusID
JOIN KELAEDSE.dbo.Opintosuorituksen_laji OSL ON OSL.id = OS.Opintosuorituksen_lajiID AND OSL.Koodi = '1'
WHERE OT.Koodi IN ( '1', '2', '3', '4', '6', '7' ) --Tutkinto oikeus, tutktinto suoriutus laji 1
CREATE NONCLUSTERED INDEX IX_kelaopiskelija_opiskelija_id ON #kelaopiskelija (opiskelija_id) INCLUDE (ht, rivinro);
-- Tulos
DELETE FROM kela.dbo.kela_edistymisen_valmistuneet
INSERT INTO kela.dbo.kela_edistymisen_valmistuneet(opiskelijaid,opiskelijaAvain,opiskeluoikeusid,opiskeluoikeusavain,OAlkamispaivamaara,kk,hetu,tutkinnonsuorituspvm,seuraava_alarajapaiva, rivinro )
SELECT T.opiskelija_id AS opiskelijaid
, o.avain AS opiskelijaavain
, oo.id AS opiskeluoikeusid
, oo.avain AS opiskeluoikeusavain
, oo.Alkamispaivamaara AS OAlkamispaivamaara
, T.kk
, T.ht hetu
, OS.Suorituspaivamaara tutkinnonsuorituspvm
, DATEADD(d, 1, EOMONTH(OS.Suorituspaivamaara)) AS seuraava_alarajapaiva
, T.rivinro
FROM #kelaopiskelija T
JOIN KELAEDSE.dbo.Opiskelija O ON O.ID = T.opiskelija_id
JOIN KELAEDSE.dbo.Opiskeluoikeus OO ON OO.OpiskelijaID = O.ID
JOIN KELAEDSE.dbo.Opiskeluoikeuden_tyyppi ot on ot.ID=oo.Op_oikeuden_tyyppiID
JOIN KELAEDSE.dbo.Opintosuoritus OS ON OS.OpiskelijaID = O.id AND OO.ID = OS.OpiskeluoikeusID
JOIN KELAEDSE.dbo.Opintosuorituksen_laji OSL ON OSL.id = OS.Opintosuorituksen_lajiID AND OSL.Koodi = '1'
WHERE ot.Koodi IN ( '1', '2', '3', '4', '6', '7' )
DELETE FROM kela.dbo.kela_edistymisen_viimeisin_valmistumispvm
-- Viimeisin valmistuminen mistä tahansa korkeakoulusta
INSERT INTO kela.dbo.kela_edistymisen_viimeisin_valmistumispvm ( hetu, seuraava_alarajapaiva )
SELECT hetu, max(seuraava_alarajapaiva) seuraava_alarajapaiva
FROM kela.dbo.kela_edistymisen_valmistuneet
GROUP BY hetu
ORDER BY seuraava_alarajapaiva
-- Ennen 1.8.2011 valmistuneet
UPDATE V
SET V.seuraava_alarajapaiva = '2011-08-01'
FROM kela.dbo.kela_edistymisen_viimeisin_valmistumispvm V
WHERE V.seuraava_alarajapaiva < '2011-08-01'
DROP TABLE #kelaopiskelija
Alarajapäivä (=>alarajapäivä)
Alarajapäivän muodostus läsnäolon mukaan mikäli opiskelija ei ole valmistunut. Aloituspäivä ei saa olla aikaisempi kuin 1.8.2011 (jos on aikaisempi, ilmoitetaan 1.8.2011).
DECLARE @alarajapvm DATE
DECLARE @helpstr varchar(20)
SET @helpstr = YEAR(getdate())
SET @helpstr = @helpstr+'-08-01'
SET @alarajapvm = @helpstr
CREATE TABLE #aloituspaivamaara (
OOalkamispaivamaara date,
Henkilotunnus varchar(12),
kk varchar(10),
OOAvain varchar(100),
OTkoodi int,
OpiskelijaAvain varchar(100)
);
-- Ei valmistuneet. Valmistuneet ovat kela_edistymisen_viimeisin_valmistumispvm taulussa
INSERT INTO #aloituspaivamaara (OOalkamispaivamaara, Henkilotunnus, kk, OOAvain, OTkoodi, OpiskelijaAvain )
SELECT DISTINCT OO.alkamispaivamaara, KE.Henkilotunnus, OO.db, OO.avain, OT.koodi, O.Avain
FROM kela.dbo.kela_edistymisen_tiedot_yhteen KE
JOIN KELAEDSE.dbo.Henkilo h ON h.henkilotunnus = KE.henkilotunnus
JOIN KELAEDSE.dbo.Opiskelija O ON O.henkiloid = H.id
JOIN KELAEDSE.dbo.Opiskeluoikeus OO ON OO.OpiskelijaID = O.ID
JOIN KELAEDSE.dbo.Opiskeluoikeuden_tyyppi ot on ot.ID=oo.Op_oikeuden_tyyppiID
-- Ei valmistuneita mukaan
WHERE KE.henkilotunnus NOT IN (SELECT P.hetu FROM kela.dbo.kela_edistymisen_viimeisin_valmistumispvm P WHERE P.hetu = KE.henkilotunnus)
AND ot.Koodi IN ( '1', '2', '3', '4', '6', '7' )
AND OO.alkamispaivamaara < @alarajapvm
CREATE NONCLUSTERED INDEX IX_hetu ON #aloituspaivamaara (henkilotunnus)
-- Tulos
DELETE FROM kela.dbo.kela_aikaisin_aloituspvm
INSERT INTO kela_aikaisin_aloituspvm ( hetu, aikaisin_aloituspvm )
SELECT Henkilotunnus, min(OOalkamispaivamaara) OOalkamispaivamaara
FROM #aloituspaivamaara
GROUP BY Henkilotunnus
ORDER BY OOalkamispaivamaara
-- Ennen 2011-08-01 kaikki 2011-08-01
UPDATE A
SET A.aikaisin_aloituspvm = '2011-08-01'
FROM kela_aikaisin_aloituspvm A
WHERE A.aikaisin_aloituspvm < '2011-08-01'
-- Poissaolot ei tutkintoon johtava opiskeluoikeus (NOT IN)
DELETE FROM KELAEDSE.dbo.Lukukausi_ilmoittautuminen
WHERE opiskeluoikeusid IN (
SELECT DISTINCT LA.opiskeluoikeusid
FROM KELAEDSE.dbo.Lukukausi_ilmoittautuminen LA
INNER JOIN KELAEDSE.dbo.Lukukausi_ilm_tila LTA ON LTA.id = LA.Lukukausi_ilmoittautumisen_tilaID
INNER JOIN KELAEDSE.dbo.Opiskeluoikeus OO ON OO.id = LA.opiskeluoikeusid
INNER JOIN KELAEDSE.dbo.Opiskeluoikeuden_tyyppi OT on ot.ID=oo.Op_oikeuden_tyyppiID
WHERE LTA.Koodi IN ( '2' , '3' )
AND OT.Koodi NOT IN ( '1', '2', '3', '4', '6', '7' ) -- Ei tutkintoon johtava oikeus jolla poissaolo
)
-- Läsnäolot ei tutkintoon johtava
DELETE FROM KELAEDSE.dbo.Lukukausi_ilmoittautuminen
WHERE opiskeluoikeusid IN (
SELECT DISTINCT LA.opiskeluoikeusid
FROM KELAEDSE.dbo.Lukukausi_ilmoittautuminen LA
INNER JOIN KELAEDSE.dbo.Lukukausi_ilm_tila LTA ON LTA.id = LA.Lukukausi_ilmoittautumisen_tilaID
INNER JOIN KELAEDSE.dbo.Opiskeluoikeus OO ON OO.id = LA.opiskeluoikeusid
INNER JOIN KELAEDSE.dbo.Opiskeluoikeuden_tyyppi OT on ot.ID=oo.Op_oikeuden_tyyppiID
WHERE LTA.Koodi IN ( '1' )
AND OT.Koodi NOT IN ( '1', '2', '3', '4', '6', '7' ) -- Ei tutkintoon johtava oikeus jolla poissaolo
)
-- Kiinnostaa onko ollut poissa
CREATE TABLE #poissaolo_pvm (
Poissaalkamispaivamaara date,
henkilotunnus varchar(12),
kk varchar(10)
)
INSERT INTO #poissaolo_pvm( Poissaalkamispaivamaara, henkilotunnus, kk )
SELECT DISTINCT min(L.alkamispaivamaara), KE.Henkilotunnus, O.db
FROM kela.dbo.kela_edistymisen_tiedot_yhteen KE
JOIN #aloituspaivamaara A ON A.Henkilotunnus = KE.henkilotunnus
JOIN KELAEDSE.dbo.Henkilo h ON h.henkilotunnus = KE.henkilotunnus
JOIN KELAEDSE.dbo.Opiskelija O ON O.henkiloid = H.id
JOIN KELAEDSE.dbo.Lukukausi_ilmoittautuminen L ON L.OpiskelijaID = O.ID
JOIN KELAEDSE.dbo.Lukukausi_ilm_tila LT ON LT.id = L.Lukukausi_ilmoittautumisen_tilaID
WHERE LT.Koodi IN ( '2' , '3' )
AND L.alkamispaivamaara < @alarajapvm
AND L.alkamispaivamaara <= A.OOalkamispaivamaara
-- Aloituspäiväksi ei saa ilmoittaa muun kuin tutkintoon johtavan koulutuksen aloituspäivää
AND O.avain IN ( SELECT A.OpiskelijaAvain FROM #aloituspaivamaara A WHERE A.Henkilotunnus = KE.Henkilotunnus AND O.db = A.kk AND A.OTkoodi IN ( '1', '2', '3', '4', '6', '7' ) )
GROUP BY KE.Henkilotunnus, O.db
CREATE NONCLUSTERED INDEX IX_poissaolo_pvm_hetu ON #poissaolo_pvm (henkilotunnus)
-- Millon ensimmäinen läsnäolo
CREATE TABLE #lasnaolo_pvm (
LasnaAlkamispaivamaara date,
henkilotunnus varchar(12)
)
INSERT INTO #lasnaolo_pvm( LasnaAlkamispaivamaara, henkilotunnus )
SELECT DISTINCT min(L.alkamispaivamaara), KE.Henkilotunnus
FROM kela.dbo.kela_edistymisen_tiedot_yhteen KE
JOIN KELAEDSE.dbo.Henkilo h ON h.henkilotunnus = KE.henkilotunnus
JOIN KELAEDSE.dbo.Opiskelija O ON O.henkiloid = H.id
JOIN KELAEDSE.dbo.Lukukausi_ilmoittautuminen L ON L.OpiskelijaID = O.ID
JOIN KELAEDSE.dbo.Lukukausi_ilm_tila LT ON LT.id = L.Lukukausi_ilmoittautumisen_tilaID
WHERE KE.Henkilotunnus IN ( SELECT P.henkilotunnus FROM #poissaolo_pvm P WHERE P.henkilotunnus = KE.henkilotunnus )
AND LT.Koodi IN ( '1' )
AND L.alkamispaivamaara < @alarajapvm
-- Aloituspäiväksi ei saa ilmoittaa muun kuin tutkintoon johtavan koulutuksen aloituspäivää
AND O.avain IN ( SELECT A.OpiskelijaAvain FROM #aloituspaivamaara A WHERE A.Henkilotunnus = KE.Henkilotunnus AND O.db = A.kk AND A.OTkoodi IN ( '1', '2', '3', '4', '5', '6', '7' ) )
GROUP BY KE.Henkilotunnus
CREATE NONCLUSTERED INDEX IX_lasnaolo_pvm_hetu ON #lasnaolo_pvm (henkilotunnus)
UPDATE A
SET A.aikaisin_aloituspvm = L.LasnaAlkamispaivamaara
FROM kela_aikaisin_aloituspvm A
JOIN #lasnaolo_pvm L ON L.henkilotunnus = A.hetu
WHERE L.LasnaAlkamispaivamaara < @alarajapvm
-- Varmuuden vuoksi vielä
UPDATE A
SET A.aikaisin_aloituspvm = '2011-08-01'
FROM kela_aikaisin_aloituspvm A
WHERE A.aikaisin_aloituspvm < '2011-08-01'
CREATE TABLE #ei_loydy (
henkilotunnus varchar(12)
)
INSERT INTO #ei_loydy (henkilotunnus)
SELECT DISTINCT Y.Henkilotunnus
FROM kela.dbo.kela_edistymisen_tiedot_yhteen Y
WHERE Y.Henkilotunnus
NOT IN (SELECT A.hetu FROM kela_aikaisin_aloituspvm A WHERE A.hetu = Y.Henkilotunnus)
AND Y.henkilotunnus
NOT IN (SELECT P.hetu FROM kela.[dbo].[kela_edistymisen_viimeisin_valmistumispvm] P WHERE P.hetu = Y.henkilotunnus)
UPDATE A
SET A.aikaisin_aloituspvm = (convert(varchar(4), YEAR(A.aikaisin_aloituspvm)) + CASE WHEN MONTH(A.aikaisin_aloituspvm)>=8 THEN '-08-01' ELSE '-01-01' END)
FROM kela.dbo.kela_aikaisin_aloituspvm A
DROP TABLE #aloituspaivamaara
DROP TABLE #poissaolo_pvm
DROP TABLE #lasnaolo_pvm
DROP TABLE #ei_loydy
Opintopisteet (=> Opintopisteet 1 (= koko opiskeluajalta) ja Opintopisteet 2 (=seurantalukuvuoden, ts. edellisen lukuvuoden pisteet))
Lasketaan opintopisteet rajapäivämäärien välisenä aikana. Opintopisteet lasketaan lehtitasolta, kaikki Virta opintosuorituslaji 2 ja laji 3 suoritukset.
Lehtitaso = Opintosuoritukseen ei sisälly muita opintosuorituksia.
Lasketaan opintopisteet suorituspäivämäärän mukaan. Hyväksiluetut joissa lähde on suomalainen korkeakoulu ei lasketa mukaan.
Alkuperäisen suoritustiedon tulisi löytyä suorituksen alkuperäisen korkeakoulun tuomana Virrasta, ei hyväksiluettuna alkuperäisenä suorituksena.
Mikäli opintosuorituksen suorituspäivämäärä on seurannan rajapäivämäärien välisenä aikana tulee sen opintopisteet mukaan pistelaskentaan.
DECLARE @Ylarajapvm DATE
DECLARE @AlarajapvmViimevuosi DATE
DECLARE @helpstr varchar(20)
DECLARE @helpstrAiempivuosi varchar(20)
SET @helpstr = YEAR(getdate())
SET @helpstr = @helpstr+'-07-31'
-- esim. syksyllä 2019 on 2019
SET @Ylarajapvm = @helpstr
SET @helpstrAiempivuosi = YEAR(getdate())-1
SET @helpstrAiempivuosi = @helpstrAiempivuosi+'-08-01'
-- esim. syksyllä 2019 aiempi 2018
SET @AlarajapvmViimevuosi = @helpstrAiempivuosi
CREATE TABLE #kela_op (
rivinro int,
henkilotunnus varchar(12),
kk varchar(12),
opiskelijaid int,
OpiskelijaAvain varchar(100),
alarajapvm date,
op1 float,
op2 float
)
CREATE TABLE #kelapisteet (
opiskelija_id int not null,
opintosuoritus_id int not null,
laajuus float not null,
suoritus_pvm date not null
)
-- Pyyntötiedoston kela_edistymisen_tiedot_yhteen haetaan opiskelijat
INSERT INTO #kela_op ( henkilotunnus, kk, opiskelijaid, OpiskelijaAvain )
SELECT H.Henkilotunnus, H.db, O.id, O.Avain
FROM KELAEDSE.dbo.Henkilo H
JOIN KELAEDSE.dbo.Opiskelija O ON O.henkiloid = H.id
WHERE H.Henkilotunnus IN
( SELECT [henkilotunnus]
FROM [kela].[dbo].[kela_edistymisen_tiedot_yhteen]
)
-- Valmistuneet kela_edistymisen_viimeisin_valmistumispvm seuraava_alarajapaiva on alarajapvm
UPDATE K
SET K.alarajapvm = V.seuraava_alarajapaiva
FROM #kela_op K
JOIN kela.dbo.kela_edistymisen_viimeisin_valmistumispvm V ON V.hetu = K.henkilotunnus
-- Loput ei valmistuneet, aikaisin mahdollinen aloituspvm alarajapvm
UPDATE K
SET K.alarajapvm = A.aikaisin_aloituspvm
FROM #kela_op K
JOIN kela.dbo.kela_aikaisin_aloituspvm A ON A.hetu = K.henkilotunnus
WHERE K.alarajapvm IS NULL
-- Rivinro missä hetu pyyntötiedostosta löytyy
UPDATE K
SET K.rivinro = Y.rivinro
FROM #kela_op K
JOIN kela.dbo.kela_edistymisen_tiedot_yhteen Y ON Y.henkilotunnus = K.henkilotunnus
-- Pistelaskenta alkaa ...
DELETE FROM #kelapisteet
INSERT INTO #kelapisteet ( opiskelija_id, opintosuoritus_id, laajuus, suoritus_pvm )
SELECT opiskelija_id = s.OpiskelijaID
, opintosuoritus_id = s.ID
, laajuus = s.Laajuus
, suoritus_pvm = s.Suorituspaivamaara
FROM KELAEDSE.dbo.Opintosuoritus s
INNER JOIN KELAEDSE.dbo.Opintosuorituksen_laji sl ON sl.ID=s.Opintosuorituksen_lajiID AND sl.Koodi IN ('2','3') --muu opintosuoritus, Kela suoritus
WHERE s.opiskelijaid IN (SELECT T.opiskelijaid FROM #kela_op T WHERE T.alarajapvm IS NOT NULL )
-- Lehtitaso = ei sisällä muita suorituksia
AND s.ID NOT IN (SELECT ss.OpintosuoritusID FROM KELAEDSE.dbo.Op_suor_sisaltyvyys ss)
-- Hyväksiluettu? Toivottavasti on rekisteröity lähdekorkeakoulussa
AND S.ID NOT IN ( SELECT sh.OpintosuoritusID
FROM KELAEDSE.dbo.Opsuorituksen_hyvaksiluku sh
-- Ei hyväksiluettuja jos lähde kotimainen korkeakoulu
-- Oletetaan että lähdekorkeakoulu on rekistöröinnyt suorituksen
WHERE sh.OpintosuoritusID IN (
SELECT OSORG.OpintosuoritusID
FROM KELAEDSE.dbo.Op_suorituksen_organisaatio OSORG
JOIN KELAEDSE.dbo.organisaatio ORG ON ORG.ID = OSORG.OrganisaatioID
JOIN KELAEDSE.dbo.Organisaation_rooli ORGROL ON ORGROL.id = OSORG.Organisaation_rooliID
WHERE
ORGROL.koodi = 3 -- Lähde
AND ORG.koodi IN ( SELECT Organisaatio_koodi FROM Yhteiset.Koodistot.Organisaatio_Oppilaitostyyppi WHERE Oppilaitostyyppi_koodi IN ('41','42')
-- 41, 42 YO ja AMK tyypin oppilaitos
)
)
)
CREATE NONCLUSTERED INDEX IX_pisteet_opiskelija_id ON #kelapisteet (opiskelija_id)
INCLUDE ( opintosuoritus_id, laajuus, suoritus_pvm)
;
-- Alaraja ja yläraja edellinen lukuvuosi, esim. 1.8.2018 - 31.7.2019
UPDATE T
SET op2 = ( SELECT sum(laajuus)
FROM #kelapisteet s
WHERE s.opiskelija_id=T.opiskelijaid
AND s.suoritus_pvm >= @AlarajapvmViimevuosi AND s.suoritus_pvm <= @Ylarajapvm
AND s.suoritus_pvm >= T.alarajapvm
GROUP BY s.opiskelija_id )
FROM #kela_op T
-- Esim. vuonna 2019 yläraja on 31.7.2019
UPDATE T
SET op1= ( SELECT sum(laajuus)
FROM #kelapisteet s
WHERE s.opiskelija_id=T.opiskelijaid
AND s.suoritus_pvm >= T.alarajapvm AND s.suoritus_pvm <= @Ylarajapvm
GROUP BY s.opiskelija_id )
FROM #kela_op T
-- Jos ei mitään on 0
UPDATE T
SET op1 = 0
FROM #kela_op T
WHERE op1 IS NULL
UPDATE T
SET op2 = 0
FROM #kela_op T
WHERE op2 IS NULL
-- Tulos
DELETE FROM [dbo].[kela_opintopisteet_poimittu_per_hetu]
INSERT INTO [dbo].[kela_opintopisteet_poimittu_per_hetu]
(
rivinro
,[henkilotunnus]
,alarajapvm
,[opintopisteet1]
,[opintopisteet2]
,[opintopisteet1_num]
,[opintopisteet2_num]
)
SELECT rivinro
, henkilotunnus
, alarajapvm
, RIGHT('000' + ISNULL(CAST(CEILING(ROUND(ROUND(SUM(op1),1),0)) AS varchar(8)),''), 3) AS opintopisteet1
, RIGHT('000' + ISNULL(CAST(CEILING(ROUND(ROUND(SUM(op2),1),0)) AS varchar(8)),''), 3) AS opintopisteet2
, CEILING(ROUND(ROUND(SUM(op1),1),0)) opintopisteet1_num
, CEILING(ROUND(ROUND(SUM(op2),1),0)) opintopisteet2_num
FROM #kela_op
GROUP BY henkilotunnus,rivinro,alarajapvm
ORDER BY rivinro, henkilotunnus,alarajapvm
-- Jos aloituspäivä (alarajapäivä) on tyhjä tai myöhempi 31.7. kuluva vuosi, opintopisteitä ei ilmoiteta (tieto on tyhjää)
UPDATE K
SET K.opintopisteet1 = NULL,
K.opintopisteet2 = NULL,
K.[opintopisteet1_num] = NULL,
K.[opintopisteet2_num] = NULL
FROM kela_opintopisteet_poimittu_per_hetu K
WHERE K.alarajapvm IS NULL
-- Jos alaraja esim. 31.7.2019 jälkeen, 1.8.2019 ei pisteitä
UPDATE K
SET K.opintopisteet1 = NULL,
K.opintopisteet2 = NULL,
K.[opintopisteet1_num] = NULL,
K.[opintopisteet2_num] = NULL
FROM kela_opintopisteet_poimittu_per_hetu K
WHERE K.alarajapvm > @Ylarajapvm
-- Jos opintopisteet on yli 1000 op => 999, vain 3 merkkiä varattu tilaa Kelatietuemallissa
UPDATE K
SET K.opintopisteet1 = '999'
FROM kela_opintopisteet_poimittu_per_hetu K
WHERE K.opintopisteet1_num > 1000
UPDATE K
SET K.opintopisteet2 = '999'
FROM kela_opintopisteet_poimittu_per_hetu K
WHERE K.opintopisteet2_num > 1000
DROP TABLE #kela_op
DROP TABLE #kelapisteet
Alkuun