Tällä sivulla ylläpidetään tietovarannossa tehtävien tarkistusten listaa. Tarkistusten tulos ilmenee siis Virta_Latausraportilla PUUTTEITA-listalla.

Vuonna 2023 lisätään monia uusia puutetarkistuksia. Samassa yhteydessä havaittuun puutteeseen on lisätty kaksi uutta tietoa:

virhTiedPvm : Virheellisen tiedon päivämäärä, esimerkiksi opintosuorituksen päivämäärä (jos virhe liittyy opintosuoritukseen). "Tiedon alkamispäivämäärä suurempi kuin päättymispäivämäärä" -tyyppisissä virheissä tähän asetetaan aina 31-12-9999, jotta virhe pysyy akuuttina siihen asti kun se on korjattu; poikkeus (tehty 11.2023): Jos opiskeluoikeuden tapauksessa opiskeluoikeudella on sen epätavallista päättymistä osoittava tila (passivoitu, luopunut), joka alkaa ennen (<=) opiskeluoikeuden alkua, niin asiantilasta ei tehdä puutetta.

opisOikAktPaatPvm: Opiskeluoikeuden aktiivisuuden päättymispäivämäärä. Jos virhe ei liity opiskeluoikeuteen liittyvään tietoon, niin silloin tämän päättelyyn käytetään opiskelijan kaikkia opiskeluoikeuksia. Tieto päätellään opiskeluoikeuden tiloista, siitä tilasta, jonka alkamispäivämäärä on suurin: Jos se tila on aktiivinen tai optio, niin otetaan tilan päättymispäivämäärä (sen puuttuessa 31-12-9999), muussa tapauksessa (valmistunut, passivoitu, luopunut, päättynyt) tilan alkamispäivämäärää edeltävä päivämäärä.

Mitä kauempana historiassa nämä päivämäärät ovat, sitä vähemmän (harvemmassa tapauksessa) ne enää vaikuttavat - joten virheiden korjaaminen kannattaa aloittaa niistä virheistä, joissa jompi kumpi näistä on joko tulevaisuudessa tai lähihistoriassa.

Marraskuussa 2023 puutteisiin on lisätty tieto onVanhempi (kyllä/ei). Puutteiden etsimisen jälkeen sovellus ottaa suuremman päivämääristä virhTiedPvm ja opisOikAktPaatPvm ja vertaa sen vuotta kuluvaan vuoteen; jos erotus on enemmän kuin viisi vuotta (esim. vuonna 2023 vertailuvuosi < 2018), niin silloin puute päätelllään vanhemmaksi puutteeksi (onVanhempi=kyllä). Näitä vanhempia puutteita ei ilmoiteta oppilaitokselle. Koska puutteen "iän" laskemisessa ei siis käytetä opiskeluoikeuden alkamispäivämäärää, niin "vanhuusrajana" voisi ehkä pitää jotain viittä pienempää vuotta.

Opiskelijat

1001 Opiskelijalla ei ole ollenkaan opiskeluoikeutta, lukukausi-ilmoittautumista tai opintosuoritusta

Mikäli tietojen perusteella löytyy sellainen opiskelija, jonka tietoihin ei voida liittää opiskeluoikeutta, lukukausi-ilmoittautumista tai opintosuoritusta.

1002 Opiskelijalla ei ole virallista suomalaista hetua tai kansallista oppijanumeroa

Mikäli tiedoista löytyy sellainen opiskelija, johon ei liity virallista suomalaista hetua tai oppijanumeroa, ilmoitetaan. Tämä tarkistus yksinään ei näy listalla, sillä luultavasti näitä puutteita löytyy aivan kaikilta. Toisin sanoen tämä puute ilmoitetaan vain, mikäli on muitakin puutteita.

1003 Opiskelijan sukupuolitieto ei täsmää hetun kanssa

Katsotaan sellaiset henkilöt, joiden sukupuoli-tieto ei täsmää henkilötunnuksesta pääteltävissä olevasta sukupuolesta.
Ei tarkisteta jos sukupuoli on tuntematon (koodi 9)

1004 Hetuton - Väärä välimerkki lopussa. Jos 2000 luvulla syntynyt tulee olla A ei -

Katsotaan henkilöt  jolla ei ole henkilötunnusta mutta syntymäaika muodossa ppkkvv-. Jos vv on 00 tai muu vuonna 2000 syntynyt vuosi välimerkki tulisi olla A, eli syntymäaika muodossa ppkkvvA

1005 Henkilön pätevyyden päättymispaivämäärä on pienempi kuin alkamispäivämäärä

Voimassaoloajallinen (alkamispäivämäärä - päättymispäivämäärä) tieto päättyy ennen alkamistaan.

1006 Oppijanumero on väärän muotoinen

Vaatimuksia oikean muotoiselle:

  • pituus 20 merkkiä
  • sisältää vain numeroita ja pisteitä
  • alkuosa oltava '1.2.246.562.24.'

1007 Oppijanumero oltava tutkinto-opiskelijoilla vuodesta 2016 alkaen

Oppijanumero oltava, jos oppijalla on opiskeluoikeus, jonka tyyppi on 1, 2, 3 tai 4 (tässä tapauksessa ei 5, 6, 7) ja opiskeluoikeuden alkamispäivämäärä >= 01.01.2016

1008 Sama oppijanumero useammalla eri henkilöön liittyvällä opiskelijalla


1009 Puuttuu joko suku- tai etunimi

Henkilöillä on oltava molemmat nimet; yhdessä kentässä olevista sanoista ei pysty luotettavasti päättelemään mikä siellä on etu- ja mikä sukunimeä.

1010 Sukunimessä tai etunimissä on muita merkkejä kuin kirjaimia, välilyöntejä, tavuviivoja, heittomerkkejä, pilkku, ...

Nimi ei saa sisältää numeroita, hetuja, sähköpostiosoitteita ym.
Sallittuja merkkejä ovat (osa näistä otettu olemassa olevista nimistä löytäen):

  • isot ja pienet kirjaimet (A-Ö, a-ö)
  • heittomerkit (esim. O'Connor), unicode-merkit 39, 96, 190, 8216, 8217
  • saksalainen kaksois-s (ß), unicode 223
  • non-breaking space, unicode 160
  • pilkku, koska se (välilyönnin kanssa) esiintyy sukunimen jälkeen erottimena ennen van/von/af
  • kauttaviiva (siis '/'), koska sitä on käytetty paljon jostain syystä (entinen ja uusi nimi ?)

Virheellinen nimi näytetään puutteen lisätiedossa (etunimet + ' ' + sukunimi) niin, että sallitut merkit näytetään pisteellä ja ei-sallitut merkit muodossa '<' + unicode-numero(kymmenjärj.) + '>, esim. '........<40>.....<41>.......'

1011 Henkilötunnuksen seitsemäs merkki on ristiriidassa syntymäajan vuosisataan nähden (1800:+, 1900: -|Y|X|W|V|U, 2000: A|B|C|D|E|F)

-

Opiskeluoikeudet

2001 Opiskeluoikeuden tila ei muodosta eheää aikajaksoa

Tiedoista katsotaan sellaiset opiskeluoikeudet, joihin liittyy usea tila, mutta tilojen väliin jää ajallisesti aukkoja tai ajat menevät päällekkäin.

2002 Opiskeluoikeuden opiskeluoikeusjakso ei muodosta eheää aikajaksoa

Tiedoista katsotaan sellaiset opiskeluoikeudet, joihin liittyy usea opiskeluoikeusjakso, mutta jaksojen väliin jää ajallisesti aukkoja tai ajat menevät päällekkäin.

2003 Opiskeluoikeuksien ensisijaisuuksissa päällekkäisyyksiä

Tiedoista katsotaan opiskelijan ensisijaisuudet (aikajakso), mutta ensijaisuuksien väliin jää ajallisesti aukkoja tai ajat menevät päällekkäin.

2004 Opiskeluoikeusjaksolta puuttuu koulutuskoodi

Tutkitaan tutkintoon johtavista opiskeluoikeuksista, liittyykö niissä oleviin opiskeluoikeusjaksoihin aina koulutuskoodi. Jos ei, puute.

2005 Ensisijaisuus puuttuu tutkinto-opiskelijan opiskeluoikeuksista (YO)

Tutkitaan opiskelijat, joilla on tutkintoon johtava opiskeluoikeus, liittyykö opiskeluoikeuksiin ollenkaan ensisijaisuutta. Jos ei, puute.

Koskee vain yliopistoja.

Rajoitettu koskemaan vain kuluvana vuonna voimassaolleita opiskeluoikeuksia.

2006 Opiskelijalla on vain optio-tilassa oleva opiskeluoikeus

Kyse on opiskelijasta, jolta ei löydy muita opiskeluoikeuksia kuin sellaisia, joiden tila on 2='optio'.

2007 Opiskeluoikeuden liittyvyys viittaa tietoon jota ei ole

Katsotaan että ilmoitettu opiskeluoikeuden liittyvyys viittaa myös tietoon joka on olemassa.

2008 Opiskeluoikeudella on monta myöntäjää

Katsotaan onko opiskeluoikeuteen ilmoitettu organisaatio-tietoa erikseen roolilla 1='myöntävä'. Jos on, tämä aiheuttaa sen että opiskeluoikeudella on monta myöntäjää.

2009 Opiskeluoikeuden päättymispaivämäärä on pienempi kuin alkamispäivämäärä

Voimassaoloajallinen (alkamispäivämäärä - päättymispäivämäärä) tieto päättyy ennen alkamistaan.

Jos opiskeluoikeudella on sen epätavallista päättymistä osoittava tila (passivoitu, luopunut), joka alkaa ennen (<=) opiskeluoikeuden alkua, niin asiantilasta ei tehdä puutetta (tämä lisätty 11/2023).

2010 Opiskeluoikeusjakson päättymispaivämäärä on pienempi kuin alkamispäivämäärä

Voimassaoloajallinen (alkamispäivämäärä - päättymispäivämäärä) tieto päättyy ennen alkamistaan.

2011 Opiskeluoikeuden tilan päättymispaivämäärä on pienempi kuin alkamispäivämäärä

Voimassaoloajallinen (alkamispäivämäärä - päättymispäivämäärä) tieto päättyy ennen alkamistaan.

2012 Opiskeluoikeuden ensisijaisuuden päättymispaivämäärä on pienempi kuin alkamispäivämäärä

Voimassaoloajallinen (alkamispäivämäärä - päättymispäivämäärä) tieto päättyy ennen alkamistaan.

2013 Opiskeluoikeusjaksojen päivämäärät eivät ole opiskeluoikeuden alkamis- ja loppupäivämäärien sisällä

Puute tehdään jokaisesta opiskeluoikeusjaksosta, joka alkaa ennen opiskeluoikeutta tai päättyy opiskeluoikeuden päättymisen jälkeen. Puuteilmoituksessa avainsarake = 'opiskeluoikeusjaksoAvain'.

2014 Tutkintoon johtamattomasta opiskeluoikeudesta puuttuu OKM:n ohjausala (koodi 1 - 12)

Opiskeluoikeuden tyyppi ei ole jokin 1-7 ja opiskeluoikeudelta joko puuttuu koulutusala tai sitten koulutusalan versio != 'ohjausala'.

2015 Opiskeluoikeus päättynyt valmistumiseen (tila 3) ilman yhtään aiempaa aktiivista tilajaksoa

Vuodelta 2003 on sellaisia, joissa aktiivinenkin jakso on ollut (mutta siis myöhäisempi kuin päättynyt). Olisiko nämä tuoreemmat (ja harvat) tapaukset opiskeluoikeuden päättymisiä ilman valmistumista.

2016 Opiskeluoikeudella on aktiivisen tilan jakso (tilakoodi 1) opiskeluoikeuden päättymisen jälkeen

-

2017 Tutkintoon johtavasta (kand./maist., tyypit 1, 2, 3, 4) vuoden 2000 jälkeen alkaneesta opiskeluoikeudesta puuttuu laajuus tai laajuus on nolla

-

2018 Tutkintoon (koulutuskoodi) liitetty opiskeluoikeus ei vastaa opiskeluoikeuden tyyppiä (opiskeluoikeustyyppi)

Esim. ylempään suoritettuun tutkintosuoritukseen on liitetty alempi opiskeluoikeus. 

Tässäkin Koulutusaste - koulutuskoodi - opiskeluoikeuden tyyppi tarkistus

Tällaista ei ole toteutettu, koska seuraava kysely - josta saatuja tietoja pitäisi tarkistaa - ei palauta yhtään riviä missäkään oppilaitoksessa:

select top 100 *
from opintosuoritus as suor
join opiskeluoikeus as oik on (oik.id = suor.opiskeluoikeusId)
join opiskeluoikeuden_tyyppi as oikTyyppiKdsto on (oikTyyppiKdsto.id = oik.op_oikeuden_tyyppiId) 
join koulutusaste as koulAsteKdsto on (koulAsteKdsto.id = suor.koulutusasteId)
join opintosuorituksen_laji as suorLajiKdsto on suorLajiKdsto.id = (suor.opintosuorituksen_lajiId)
where suorLajiKdsto.koodi = '1' -- 1 = tutkinto

2019 Päättynyt (tila 3) tutkinto-oikeus (1,2,3,4,6,7), mihin ei liity tutkintosuoritusta (opintosuorituslaji 1)

Voivat olla tapauksia, joissa pitäisi käyttää nykyään tilaa 6 eli päättynyt.

2020 Tutkintolajin opintosuoritus (laji 1) ei liity tutkinto-opiskeluoikeuteen (1,2,3,4,6,7)

-

2021 Erikoistumiskoulutuksen opiskeluoikeudelta (tyyppi 19) puuttuu OPH:n kolmenumeroinen koulutuskoodi

-

2022 Opiskeluoikeusjakson kunta ei ole selvillä, tieto puuttuu tai on 999 (=Tuntematon)

-

2023 Tutkintosuorituksen tutkintokoodi on 00-loppuinen (TK:n "kohdistuskoodi")

Yhdeksän tapausta vuosilta 2005-2006.

2024 Opiskeluoikeuden tila koodilla 3 (valmistunut), 5 (luopunut) tai 6 (päättynyt) sisältää päättymispäivämäärän (!= 31.12.9999)

Nämä tilat ovat lopullisia, joten niillä ei saa olla päättymispäivää tai päättymispäivän on oltava 31.12.9999.

2025 Tutkintosuorituksen tutkintokoodi on 999999 (Tuntematon)

-

2026 Toisiinsa liittyvillä alemman ja ylemmän tutkinnon opiskeluoikeuksilla ei ole sama alkamispaivämäärä

-

2027 Opiskeluoikeusjakson tutkintokoodin koulutusaste ei vastaa opiskeluoikeuden tyyppiä

Tarkistus tehdään opiskeluoikeuden valmistumisajankohdalla olleen opiskeluoikeusjakson tutkintonimikkeelle (mutta ei tutkintokoodille 999999).

Puute syntyy kun jokin seuraavista toteutuu:

  • opiskeluoikeuden tyyppi = 1 ja koulutusastetaso2_koodi != 62
  • opiskeluoikeuden tyyppi = 2 ja koulutusastetaso2_koodi != 63
  • opiskeluoikeuden tyyppi = 3 ja koulutusastetaso2_koodi != 71
  • opiskeluoikeuden tyyppi = 4 ja koulutusastetaso2_koodi != 72
  • opiskeluoikeuden tyyppi = 5 ja koulutusastetaso2_koodi != 73
  • opiskeluoikeuden tyyppi = 6 ja koulutusastetaso2_koodi != 81
  • opiskeluoikeuden tyyppi = 7 ja koulutusastetaso2_koodi != 82
  • opiskeluoikeuden tyyppi != 1,2,3,4,5,6,7 ja koulutusastetaso2_koodi = 62|63|71|72|73|81|82

2028 Tutkinto-opiskeluoikeuden aktiiviselta jaksolta puuttuu läsnäoloilmoittautumisia

-

2029 Suomen kansalaisella on rahoituslähteenä lukuvuosimaksu (koodi 5)

Kansalaisuuden saamisesta(/menettämisestä) ei ole päivämäärätietoa, joten puutetta ei voida tarkistaa opiskeluoikeusjakson ajankohdan mukaisesti.

2030 Opiskeluoikeudella ei ole opiskeluoikeusjaksoa opiskeluoikeuden alusta alkaen

Toteutettu tiketin CSCTIE-440:n perusteella. Ko. tiketillä kirjattu mm. puutteen vaikutuksia seuraavasti:

"Jakso siirto-opiskelijan alkamisesta alkaen
Havaittu Peppi-yliopistoilla, erityisesti TY.

Puute tuli esille kun Kela opiskelijatiedonkeruun valmistuneiden aloituspäivämäärä muuttunut.

Kela kerää 2 viimeisen lukuvuoden aikana valmistuneet.

Aloittamispäivämäärä on laskettu opiskeluoikeusjakson alkamispäivämäärästä.
Kun tieto aiemmin tullut ok, on jaksoja opiskeluoikeuden alkamisesta alkaen ei lähtöpäivämäärä ole ollut virheellinen.

Vaikutusta myös tutkinnon suoritusaikaan siirto-opiskelijoiden kohdalla jos suoritetun tutkinnon opiskeluoikeuteen ei liity käytetyt läsnä, poissaolomäärät."

2031 Opiskelijaliikkuvuuden päättymispaivämäärä on pienempi kuin alkamispäivämäärä

Voimassaoloajallinen (alkamispäivämäärä - päättymispäivämäärä) tieto päättyy ennen alkamistaan.

2032 Tutkintoon johtavan opiskeluoikeuden laajuus ei ole jaollinen 30op

Opiskeluoikeuden, joka on tyypiltään 1, 2, 3, tai 4, laajuus on annettu (ei null eikä nolla) laajuus ei ole jaollinen 30:llä (eli ei ole 30, 60, 90, 120,150, 180,...).

2033 Tutkintoon johtavan opiskeluoikeuden laajuus poikkeaa koulutuskoodin mukaisesta laajuudesta

Koulutuskoodi otetaan opiskeluoikeuden ajallisesti viimeisimmältä (= suurin alkamispäivämäärä) opiskeluoikeusjaksolta) sellaiselta opiskeluoikeusjaksolta, jolle on määritelty tutkintonimike. Ajallisesti viimeisimmän perusteella oletetaan saavan tuorein tieto ja se estää sen, ettei yhdestä opiskeluoikeudesta tulee useampa puutetta (eräällä AMK:lla puutteiden lukumäärä väheni tällä tavalla 522:sta 507:ään - ei siis merkittävästi, mutta loogisesti oikeaan tulokseen onkin pyrkimys).

Puutetarkistuksen versiossa 20231214 voidaan koulutuskoodille määritellä (tallennetaan tietokantaan) useampi laajuus, ja opiskeluoikeudella tulisi olla jokin niistä.

2034 Opiskeluoikeuden opiskeluoikeusjaksoissa on aukkoja tai päällekkäisyyksiä

On kyse aukosta, jos edellisen jakson päättymispäivämäärä < seuraavan jakson alkamispaivämäärä - 1 - eli siinä välissä on vähintään yksi päivä.

On kyse päällekkäisyydestä, jos kaksi mitä tahansa saman opiskeluoikeuden jaksoa ovat voimassa ainakin yhtenä samana päivänä.

Tällä puutteella ei tutkita opiskeluoikeusjakson puuttumista opiskeluoikeuden alussa eikä lopussa, eikä opiskeluoikeusjakson olemassaoloa ennen tai jälkeen opiskeluoikeuden voimassaoloaikaa. Näille tapauksille on jo ennestään tarkistuksia (esim. 2002, 2013, 2030).

Lkm 19.01.2024 kaikki oppilaitokset yhteensä 16, kaikki alle 7 vuoden vanhoja tapauksia.

2035 Opiskeluoikeuden tilojen voimassaoloajoissa on aukkoja tai päällekkäisyyksiä

On kyse aukosta, jos edellisen tilan voimassaoloajan päättymispäivämäärä < seuraavan tilan voimassaoloajan alkamispaivämäärä - 1 - eli siinä välissä on vähintään yksi päivä.

On kyse päällekkäisyydestä, jos kaksi mitä tahansa saman opiskeluoikeuden tilan voimassaoloaikaa (alkPvm - paatPvm) ovat voimassa ainakin yhtenä samana päivänä.

Tällä puutteella ei tutkita opiskeluoikeuden tilan puuttumista opiskeluoikeuden alussa eikä lopussa, eikä opiskeluoikeuden tilan olemassaoloa ennen tai jälkeen opiskeluoikeuden voimassaoloaikaa. Näille tapauksille on jo ennestään tarkistuksia (esim. 2001, 2016).

Lkm 19.01.2024 kaikki oppilaitokset yhteensä 2400, kaikki alle 7 vuoden vanhoja tapauksia.

2036 Siirto-opiskeluoikeuden siirtopvm puuttuu tai on epälooginen opiskeluoikeuden voimassaoloaikaan nähden.

Muutokset 23.02.2024:

  • Tarkistetaan vain tutkinto-oikeuksilta, tyypit 1, 2, 3, 4 (lisäys 23.02.2024)
  • Tämä sääntö poistetaan:

Tässä sallitaan siirtopäivämäärän olla > AlkPvm ja < PaatPvm. Tällöin tulkitaan saapuneeksi. Tähän on perusteena:

Silloin kun on kyseessä lähtevä, niin korkeakoululla on itsellään mahdollisuus asettaa opiskeluoikeuden päättymispäivämäärä; oletetaan, että korkeakoulu tekee niin.
Silloin kun kyseessä on saapuva, niin korkeakoulun sallitaan tallentaa siirtopäivämääräksi toiselta korkeakoululta saamansa tieto, vaikka se olisikin virheellinen.

Edellisen tilalle tämä:

Tietovarannon tiedot#opiskeluoikeus :sta

"Alkuperäisen opiskeluoikeuden alkamispäivämäärä, jos vastaanottava korkeakoulu (kohde), ja siis tämä päivämäärä on aikaisempi kuin opiskeluoikeuden alkamispäivämäärä.

Siirtopäivämäärä, jos lähettävä korkeakoulu (lähde), ja siis tämä päivämäärä on myöhempi kuin opiskeluoikeuden alkamispäivämäärä."

Lisäksi SiirtoPvm = AlkPvm käsitellään kuten SiirtoPvm > AlkPvm, jotta ei jäisi jäljelle säännötöntä tapausta.


Kohdeorg.Lähdeorg.SiirtosuuntaSiirtopäivämääräTulkinta




Tällä yksinkertaisella tavalla pystytään lähde- ja kohdeorganisaatioita tutkimatta päättelemään, onko kyseessä saapuva vai lähtevä "opiskelija" (opiskeluoikeudestahan tässä on kyse; opiskelijalla voi olla muita opiskeluoikeuksia siinä organisaatiossa, jossa hänen tietty opiskeluoikeus lakkautetaan).
ei oleei ole
ei oleOk.
ei oleei ole
< AlkPvmOk. Tulkitaan saapuneeksi; SiirtoPvm tarkoittaa lähdeorganisaation op.oikeuden AlkPvm:ää.
ei oleei ole
>= AlkPvmTulkitaan lähteneeksi. Virhe, jos PaatPvm ei ole asetettu; PaatPvm on oltava Siirtopvm - 1




Yllä olevien yksinkertaisten sääntöjen ja näiden seuraavien sääntöjen pitää olla hyvin pitkälti samanlaisia. 
onei olelähteväei oleVirhe.
onei olelähteväonVirhe, jos SiirtoPvm != PaatPvm+1 tai PaatPvm puuttuu





ononmolemmatei oleVirhe.
ononmolemmatonVirhe, jos SiirtoPvm >= AlkPvm ja (PaatPvm puuttuu tai SiirtoPvm != PaatPvm + 1).





ei oleonsaapuvaei oleVirhe. Ei voida tietää, milloin opiskeluoikeus alkoi lähtöorganisaatiossa.
ei oleonsaapuvaonVirhe, jos SiirtoPvm >= opiskeluoikeuden AlkPvm.


2037 Opiskeluoikeuden alkamispäivämäärä on kaukana tulevaisuudessa (> vuosi).


2038 Tutkinto (suorituksen laji 1) suoritettu mutta opiskeluoikeuden tila ei ole valmistunut (koodi 3).

Tutkintaa mukaan otetaan vain ne tutkintosuoritukset (laji = 1), joihin liitettyjen opiskeluoikeuksien alkamispäivämäärä on >= 01.01.2015,

Puute syntyy, jos ajallisesti viimeisimmän opiskeluoikeuden tilan (koodi) ei ole 3 (ml. sen, ettei ole ollenkaan opiskeluoikeuden tiloja).

Lukukausi-ilmoittautumiset

3001 Oppilaitoksella muiden korkeakoulujen lukukausi-ilmoittautumisia

Oppilaitoksella muiden korkeakoulujen lukukausi-ilmoittautumisia. Ilmoittaa tulisi vain oman organisaation lukukausi-ilmoittautumiset.

3002 Opiskeluoikeuteen liittyvän lukuvuosimaksun päättymispaivämäärä on pienempi kuin alkamispäivämäärä

Voimassaoloajallinen (alkamispäivämäärä - päättymispäivämäärä) tieto päättyy ennen alkamistaan.

3003 Lukukausi-ilmoittautumisen päättymispaivämäärä on pienempi kuin alkamispäivämäärä

Voimassaoloajallinen (alkamispäivämäärä - päättymispäivämäärä) tieto päättyy ennen alkamistaan.

3004 Lukuvuosimaksun velvollisuusjaksojen pitäisi olla lukuvuoden(kauden) alkamis- ja päättymispäivämäärien mukaisia

Alkamispäivämäärän oltava 01.08 tai 01.01 ja päättymispäivämäärän 31.12 tai 31.07, eikä alkamis- ja päättymispäivämäärän välinen aina saa olla niin suuri, että maksu koskisi enempää kuin yhtä lukukautta.

Opintosuoritukset

4001 Opintosuoritukselta puuttuu nimi

Mikäli tiedoista löytyy opintosuorituksia joihin liittyen ei ole minkäänlaista nimeä, ilmoitetaan tämä puutteena.

4002 Opintosuoritukselta puuttuu arvosana

Mikäli tiedoista löytyy opintosuorituksia joihin liittyen ei ole minkäänlaista arvosanaa, ilmoitetaan tämä puutteena.

4003 Opintosuoritukselta puuttuu koulutusala

Mikäli tiedoista löytyy opintosuorituksia joihin liittyen ei ole lainkaan koulutusala-tietoa (koulutusala2002 tai opintoala1995), ilmoitetaan tämä puutteena.
Opintosuoritukset jotka tarkistetaan laji 2.  Ei tarkisteta kokonaisuuksia, eli suorituksia jotka sisältävät muita suorituksia.

4004 Koulutusaste puuttuu


4005 Opintosuoritukselta (laji: tutkinto) puuttuu tutkintonimike/koulutuskoodi

Mikäli tutkintolajiselta opintosuoritukselta puuttuu koulutuskoodi, ilmoitetaan tämä puutteena.

4006 Opintosuoritukselta puuttuu opiskeluoikeus (AMK)

Tarkistetaan Ammattikorkeakoulujen osalta. Opintosuoritusten yhteydessä pitää ilmoittaa opiskeluoikeus.

4007 Opintosuoritus virheellisellä sisältyvyyden avaintiedolla

Mikäli XML-tiedoissa on ilmoitettu opintosuorituksen sisältyvyys, mutta sisaltyvaOpintosuoritusavain-tieto ei ole sama kuin mikään varsinainen opintosuorituksen avain-tieto, ilmoitetaan tämä puutteena. Tarkistetaan vain suorituksilta, jotka on suoritettu vuonna 2006 tai sen jälkeen.

4008 Opintosuorituksella on monta myöntäjää

Katsotaan onko opintosuoritukseen ilmoitettu organisaatio-tietoa erikseen roolilla 1='myöntävä'. Jos on, tämä aiheuttaa sen että opintosuorituksella on monta myöntäjää.

4009 Tutkintosuoritukselta puuttuu opiskeluoikeusliitäntä

Tutkintosuoritus tulee olla liitetty opiskeluoikeuteen, siihen opiskeluoikeuteen josta valmistunut.
Tarkistetaan vain suorituksilta jotka suoritettu vuonna 2000 tai sen jälkeen.

4010 Suorituspäivämäärä tulevaisuudessa (yli 1 v)

Suorituksen suorituspäivämäärä on yli vuoden tulevaisuudessa

4011 Erikois(hammas)lääkäri tutkintosuoritus (2015 alkaen ei ole tutkinto)

Valmistuneelle erikoislääkärille tuotu tutkintosuoritus (opintosuoritus laji 1). Vuodesta 2015 ei ole tutkinto.

4012 Opintosuoritus (suorituspäivämäärä) ajalla, jolloin opiskeluoikeudella ei ole opiskeluoikeusjaksoa

Opiskeluoikeudella ja opiskeluoikeusjaksolla olevia tietoja käytetään monissa tiedonkeruuissa (suodattamaan tai luokittelemaan), joissa on mukana opiskeltu määrä; suoritus ei tule mukaan määrään, jos se ei ajallisesti yhdisty opiskeluoikeusjaksoon.

11/2023 CSCVIRTAOTP-2386:

Jos opintosuoritus on hyväksiluettu suoritus, niin silloin suorituspäivämäärää ei tarkisteta, mutta hyväksilukupäivämäärällä pitää olla opiskeluoikeusjakso - jos ei ole, niin tehdään tämä puute.

Jos opintosuoritus ei ole hyväksiluettu suoritus, ja suorituspäivämäärällä ei ole opiskeluoikeusjaksoa, niin puutetta ei tehdä seuraavissa tapauksissa:

1) Jos opiskeluoikeudella on siirtopäivämäärä, niin sitä käytetään tässä tarkistuksessa opiskeluoikeuden alkamispäivämäärän tai päättymispäivämäärän sijaan. Jos siirtopäivämäärä < alkamispäivämäärä, niin opiskeluoikeus on siirron kohde (!= lähde), ja sitä käytetään alkamispäivämäärän sijaan - tulkitaan niin, että opintosuoritus on suoritettu siirron lähteessä. Jos taas siirtopäivämäärä >= alkamispäivämäärä, niin opiskeluoikeuden katsotaan päättyneen siirtopäivämäärää edeltävänä päivänä - jolloin suorituspäivämäärän pitäisi olla < siirtopäivämäärä. 

2) Suorituksen opiskeluoikeuden opiskelijalla on jokin toinen tutkinto-opiskeluoikeus (= opiskeluoikeuden tyyppi 1, 2, 3 tai 4), joka on voimassa suorituspäivämäärällä.

Puutetarkistuksen versiossa 20231215

1) Puutekoodin 4012 perässä on tavuviiva ja nelimerkkinen kirjain/numero-yhdistelmä, missä on lisätietoa tapauksesta. Vastaavat lisätiedot ilmenevät puutteen lisätiedon alusta.


LisatiedossaKoodien merkitysPuutekoodissaKoodien merkitys
[H0][S0][T][V1]

H0: hyväksiluettu=ei

S0: siirtyvä opiskeluoikeus=ei ole

T: on toinen tutkinto-oikeus suorituspäivämäärällä

V1: suorituspäivämäärä ennen opiskeluoikeuden alkua

V2: suorituspäivämäärä opiskeluoikeuden voimassaoloajalla

V3: suorituspäivämäärä opiskeluoikeuden päättymisen jälkeen

V2 ja V3 tapaukset lienevät kaikki selviä virheitä, riippumatta esim. siitä ovatko suoritukset kopioitu tai siirretty toiselta opiskeluoikeudelta.

00t1
  1. Onko hyväksiluettu 0/1
  2. Siirtyvä opiskeluoikeus:
    0 = ei ole, s = saapuva, l = lähtevä
  3. Onko toista tutkinto-oikeutta suorituspäivämäärällä
    t = on, u = ei ole
  4. Suorituspäivämäärä
    1 = ennen opiskeluoikeuden alkua
    2 = opiskeluoikeuden voimassaoloajalla
    3 = opiskeluoikeuden päättymisen jälkeen
[H0][S0][T][V2]
00t2
[H0][S0][T][V3]
00t3
[H0][SS][T][V1]SS: siirtyvä opiskeluoikeus=saapuva0st1
[H0][SS][T][V2]
0st2
[H0][SS][T][V3]
0st3
[H0][SL][T][V1]SL: siirtyvä opiskeluoikeus=lähtevä0lt1
[H0][SL][T][V2]
0lt2
[H0][SL][T][V3]
0lt3
[H0][S0][V1][T] puuttuu: ei ole toista tutkinto-oikeutta suorituspäivämäärällä00u1
[H0][S0][V2]
00u2
[H0][S0][V3]
00u3
[H0][SS][V1]
0su1
[H0][SS][V2]
0su2
[H0][SS][V3]
0su3
[H0][SL][V1]
0lu1
[H0][SL][V2]
0lu2
[H0][SL][V3]
0lu3




[H1][S0][T][V1]

H1: hyväksiluettu=kyllä

Muuten samoin kuin ei-hyväksiluetut.

Suorituspäivämäärän tilalla hyväksilukupäivämäärä.

10t1
...



2) Jos lisätiedossa on koodi [V1], niin puute katsotaan vanhaksi (→ ei ilmoiteta Virrasta korkeakoululle) riippumatta opiskeluoikeuden jatkumisesta, jos suoritus-/hyväksilukupäivämäärän vuosi on kuluvasta vuodesta yli kuuden vuoden päässä (esim. vuotta 2023 elettäessä se olisi < 2018).


Puutetarkistuksen versiossa 20240105: 

LisatiedossaKoodien merkitysPuutekoodissaKoodien merkitys
aa[H0][S0][Tbb][V1]

aa: Suoritukseen liittyvän opiskeluoikeuden tyyppi (alle kahden merkin mittaisen koodiarvon tapauksessa etunollitettu)

H0: hyväksiluettu=ei

S0: siirtyvä opiskeluoikeus=ei ole

Tbb: bb = suorituspäivämäärällä voimassaolevan toisen opiskeluoikeuden (kuin mihin suoritus on liitetty) tyyppi; jos useita tällaisia toisia opiskeluoikeuksia, niin niiden tyyppien pienin koodiarvo (mahdollisesti etunollitetun koodiarvon merkkijonomuotoisen arvon perusteella (ts. aakkosjärjestys)); jos ei ole yhtään, niin 00

V1: suorituspäivämäärä ennen opiskeluoikeuden alkua

V2: suorituspäivämäärä opiskeluoikeuden voimassaoloajalla

V3: suorituspäivämäärä opiskeluoikeuden päättymisen jälkeen

V2 ja V3 tapaukset lienevät kaikki selviä virheitä, riippumatta esim. siitä ovatko suoritukset kopioitu tai siirretty toiselta opiskeluoikeudelta.

S-bbE
  1. S = suoritettu, H = hyväksiluettu
  2. Siirtyvä opiskeluoikeus:
    - = ei ole, S= saapuva, L = lähtevä
  3. (bb) Toisen opiskeluoikeuden tyyppi (00 ei ole toista)
  4. Suorituspäivämäärä
    E = ennen opiskeluoikeuden alkua
    A = opiskeluoikeuden voimassaoloajalla
    J = opiskeluoikeuden päättymisen jälkeen
aa[H0][S0][Tbb][V2]
S-bbA
aa[H0][S0][Tbb][V3]
S-bbJ
aa[H0][SS][Tbb][V1]SS: siirtyvä opiskeluoikeus=saapuvaSSbbE
aa[H0][SS][Tbb][V2]
SSbbA
aa[H0][SS][Tbb][V3]
SSbbJ
aa[H0][SL][Tbb][V1]SL: siirtyvä opiskeluoikeus=lähteväSLbbE
aa[H0][SL][Tbb][V2]
SLbbA
aa[H0][SL][Tbb][V3]
SLbbJ




aa[H1][S0][Tbb][V1]

H1: hyväksiluettu=kyllä

Muuten samoin kuin ei-hyväksiluetut.

Suorituspäivämäärän tilalla hyväksilukupäivämäärä.

H-bbE
...



4013 Organisaatiokoodi 99 hyväksiluvun lähteenä (tarkistetaan käyttömäärien selvittämiseksi)

Tarkistetaan tällaisten tapausten lukumäärä.

4014 Opintosuoritus (suorituspäivämäärä) ajalla, jolloin opiskeluoikeudella ei ole aktiivista opiskeluoikeuden tilaa

Samat tarkennukset kuin puutteella 4012 (11/2023 CSCVIRTAOTP-2386).

4015 Hyväksilukemispvm on pienempi kuin suorituspvm

Opintosuorituksen pitää olla suoritettu ennen kuin se voidaan hyväksilukea, joten hyväksymukemispäivämäärä ei voi olla aiempi kuin suorituspäivämäärä.

4016 Tutkinnon (suorituksen laji 1) suorituspvm on monta (6) kuukautta tulevaisuudessa.

4017 Hyväksiluettu suoritus liikkuvuusjakson ajalla ilman lähdeorganisaatiota (org.rooli koodi 3) koodilla UK/UM

Tutkitaan liikkuvuusjaksoja, joiden liikkuvuuden suunta on lähtevä (koodi 1).

Tällä tarkistuksella yritetään saada kiinni mahdolliset tapaukset, joiden kuuluisi olla merkitty ulkomaan suorituksiksi, hyväksiluettuja UK/UM.
Koska opiskelija on ollut suorituspäivämäärällä kv-liikkuvuusjaksolla, niin puutetarkistuksessa oletetaan suorituksen tehdyn ulkomailla,
mutta suoritusta ei kuitenkaan korkeakoulussa ole merkitty koodilla UK/UM.

Liikkuvuusjakson ajalla voi toki tulla suorituksia, jotka eivät ole ulkomaan, vaan jotain muuta, kuten avoimen opintoja jostain MOOCista.

Kyseiset opintopisteet, jos kuuluisi olla UK/UM, jäävät pois esim. OKM opintopistekeruun ulkomailla suoritetut opinnot pistekertymästä
https://wiki.eduuni.fi/display/CSCVIRTA/Opintopistetiedonkeruu+AMK#OpintopistetiedonkeruuAMK-Ulkomailla


sekä myös myöhemmin TK Tutkintokeruussa "Ulkomailla suoritetut opintopisteet (opulk)" pisteistä.
https://wiki.eduuni.fi/display/CSCVIRTA/Tilastokeskuksen+tutkintotiedonkeruu+ammattikorkeakoulut#Tilastokeskuksentutkintotiedonkeruuammattikorkeakoulut-Ulkomaillasuoritetutopintopisteet(opulk)

Ja voi vaikuttaa myös Kelan edistymisen seurannassa jossa hyväksiluetut pisteet lasketaan  mukaan kertymään siinä tapauksessa että niiden lähde ei ole kotimainen korkeakoulu.
Eli jos on UK/UM ne lasketaan mukaan. Juuri tällaisista jossa ei oltu merkitty ulkomaan suoritukseksi ollut viime Kelan edistymisen seurannassa tuoreita tapauksia.
Ja voinut olla merkittävistä opintopistekertymistä kyse sekä opiskelijan kannalta ikävä jos tullut Kelalta selvityspyyntö opintojen edistymisestä.
Kelan selvittäessä on sitten huomattu miksi opintopisteitä puuttunut, kun ei ollut ulkomaan vaihdosta pisteet huomioitu virheellisen kirjauksen vuoksi.
Tietysti nykyään voi olla niitä jossa kyse virtuaalisesta vaihdosta, eli ei fyysesti ole ollut ulkomailla vaihdossa, eikä näin myöskään varmaan kuulu olla ulkomailla suoritettu.


Liikkuvuusjaksot

5001 Liikkuvuusjakson saapuvan opiskelijan koulutusaste suomalaisessa korkeakoulussa

Tutkintaan löytyykö sellaista liikkuvuusjaksoa, jonka suunta on saapuva ja liikkuvuusjakson päättymispäivämäärä on menneisyydessä, jolta puuttuu koulutusaste (opiskeluoikeuden tyyppi -tieto).

5002 Liikkuvuusjakson päättymispäivä on varhaisempi kuin alkamispäivä

Jos löytyy liikkuvuusjaksoja, joissa päättymispäivä on varhaisempi kuin alkamispäivä, ilmoitetaan tämä puutetietona.

5003 Liikkuvuusjakson liikkuvuusohjelma puuttuu 87 pv tai pidemmältä jaksolta

Tarkistetaan liikkuvuusjaksoista, joiden kesto on 87 päivää tai enemmän, puuttuuko liikkuvuusohjelma, ja mikäli puuttuu ja liikkuvuusjakso on alkanut 1.1.2016 tai sen jälkeen, ilmoitetaan puute.

5004 Liikkuvuusjakson liikkuvuuden tyyppi puuttuu

Tarkistetaan liikkuvuusjaksoista puuttuuko liikkuvuuden tyyppi, ja mikäli puuttuu ja liikkuvuusjakso on alkanut 1.1.2016 tai sen jälkeen, ilmoitetaan puute.


SQL-koodi

SQL
-- OPISKELIJA
select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '1001' as virhekoodi
, 'Opiskelijalla ei ole ollenkaan opiskeluoikeutta, lukukausi-ilmoittautumista tai opintosuoritusta' as kuvaus
, 'opiskelijaAvain' as avainsarake
, a.avain
FROM Opiskelija AS a
WHERE 1=1
AND a.ID NOT IN (
	SELECT OpiskelijaID FROM Opiskeluoikeus
)
AND a.ID NOT IN (
	SELECT OpiskelijaID FROM Opintosuoritus
)
AND a.ID NOT IN (
	SELECT OpiskelijaID FROM Lukukausi_ilmoittautuminen
)

select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '1002' as virhekoodi
, 'Opiskelijalla ei ole virallista suomalaista hetua tai kansallista oppijanumeroa' as kuvaus
, 'opiskelijaAvain' as avainsarake
, a.avain
FROM Opiskelija AS a
WHERE 1=1
AND a.HenkiloID IN (
	SELECT ID FROM Henkilo
	WHERE Henkilotunnus IS NULL
	OR Henkilotunnus NOT LIKE '______%____'
)
AND a.Kansallinen_op_id IS NULL

select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '1003' as virhekoodi
, 'Opiskelijan sukupuolitieto ei täsmää hetun kanssa' as kuvaus
, 'opiskelijaAvain' as avainsarake
, a.avain
, coalesce(a.avain,'#Puuttuu#') as opiskelijaAvain
FROM Opiskelija AS a
INNER JOIN Henkilo h ON h.ID=a.HenkiloID
where 1=1
and len(h.Henkilotunnus)=11 -- on hetu
and h.SukupuoliID is not null -- on sp
and(
	( --nainen
	   cast(substring(h.Henkilotunnus,10,1) as int)%2=0
	and h.SukupuoliID <> (select id from Sukupuoli where Koodi='2')
	)
	or
	( --mies
	   cast(substring(h.Henkilotunnus,10,1) as int)%2=1
	and h.SukupuoliID <> (select id from Sukupuoli where Koodi='1')
	)
)


-- OPISKELUOIKEUS
select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '2001' as virhekoodi
, 'Opiskeluoikeuden tila ei muodosta eheää aikajaksoa' as kuvaus
, 'opiskeluoikeusAvain' as avainsarake
, a.Avain
FROM Opiskeluoikeus AS a
INNER JOIN Op_oikeuteen_liittyva_tila AS b ON b.OpiskeluoikeusID=a.ID
WHERE 1=1
-- On usea
AND b.OpiskeluoikeusID IN (
	SELECT c.OpiskeluoikeusID
	FROM Op_oikeuteen_liittyva_tila AS c
	GROUP BY c.OpiskeluoikeusID HAVING COUNT(*)>1
)
-- Ei viimeinen
AND b.Alkamispaivamaara < (
	SELECT MAX(c.Alkamispaivamaara)
	FROM Op_oikeuteen_liittyva_tila AS c
	WHERE c.OpiskeluoikeusID=b.OpiskeluoikeusID
	GROUP BY c.OpiskeluoikeusID 
)
-- Ei seuraajaa
-- tai Paattymispaivamaaraa ei asetettu
AND(
	b.Paattymispaivamaara NOT IN (
		SELECT DATEADD(day,-1,c.Alkamispaivamaara)
		FROM Op_oikeuteen_liittyva_tila AS c
		WHERE c.OpiskeluoikeusID=b.OpiskeluoikeusID
	)
 OR b.Paattymispaivamaara IS NULL
)


select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '2002' as virhekoodi
, 'Opiskeluoikeuden opiskeluoikeusjakso ei muodosta eheää aikajaksoa' as kuvaus
, 'opiskeluoikeusAvain' as avainsarake
, a.Avain
FROM Opiskeluoikeus AS a
INNER JOIN Opiskeluoikeusjakso AS b ON b.OpiskeluoikeusID=a.ID
WHERE 1=1
-- On usea
AND b.OpiskeluoikeusID IN (
	SELECT c.OpiskeluoikeusID
	FROM Opiskeluoikeusjakso AS c
	GROUP BY c.OpiskeluoikeusID HAVING COUNT(*)>1
)
-- Ei viimeinen
AND b.Alkamispaivamaara < (
	SELECT MAX(c.Alkamispaivamaara)
	FROM Opiskeluoikeusjakso AS c
	WHERE c.OpiskeluoikeusID=b.OpiskeluoikeusID
	GROUP BY c.OpiskeluoikeusID
)
-- Ei seuraajaa
-- tai Paattymispaivamaaraa ei asetettu
AND(
	b.Paattymispaivamaara NOT IN (
		SELECT DATEADD(day,-1,c.Alkamispaivamaara)
		FROM Opiskeluoikeusjakso AS c
		WHERE c.OpiskeluoikeusID=b.OpiskeluoikeusID
	)
 OR b.Paattymispaivamaara IS NULL
)

 
select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '2003' as virhekoodi
, 'Opiskeluoikeuksien ensisijaisuuksissa päällekkäisyyksiä' as kuvaus
, 'opiskeluoikeusAvain' as avainsarake
, oik1.Avain+','+oik2.Avain
FROM Op_oikeuden_ensisijaisuus AS e1
inner join Opiskeluoikeus oik1 on oik1.ID=e1.OpiskeluoikeusID
inner join Opiskeluoikeus oik2 on oik2.OpiskelijaID=oik1.OpiskelijaID
inner join Op_oikeuden_ensisijaisuus e2 on e2.OpiskeluoikeusID=oik2.ID
WHERE 1=1
-- varmistetaan eri ensisijaisuus
AND 1 IN (
	CASE
	-- jos saman oikeuden, ...
	WHEN e1.OpiskeluoikeusID=e2.OpiskeluoikeusID THEN
	-- ...niin eri päivän => ensisijaisuudet ovat eri
		CASE WHEN e1.Alkamispaivamaara<>e2.Alkamispaivamaara THEN 1 ELSE 0 END
	ELSE
		1 -- eri oik => ok
	END
)
-- varmistetaan päällekkäisyys, siten...
AND(e1.Paattymispaivamaara BETWEEN e2.Alkamispaivamaara AND e2.Paattymispaivamaara
 OR e2.Paattymispaivamaara BETWEEN e1.Alkamispaivamaara AND e1.Paattymispaivamaara
)
--...että e1 sisältää aiemman päivämäärän
AND(e1.Alkamispaivamaara<e2.Alkamispaivamaara
 OR (e1.Alkamispaivamaara=e2.Alkamispaivamaara AND e1.Paattymispaivamaara<e2.Paattymispaivamaara)
 OR (e1.Alkamispaivamaara=e2.Alkamispaivamaara AND e1.Paattymispaivamaara=e2.Paattymispaivamaara)
)
--bonus: ilmoitetaan oikeudet vain kerran:
AND oik1.Avain<=oik2.Avain
 
select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '2004' as virhekoodi
, 'Opiskeluoikeusjaksolta puuttuu koulutuskoodi' as kuvaus
, 'opiskeluoikeusAvain' as avainsarake
, a.Avain
from Opiskeluoikeus AS a
inner join Opiskeluoikeusjakso AS b on b.OpiskeluoikeusID=a.ID
inner join Opiskeluoikeuden_tyyppi c on c.ID = a.Op_oikeuden_tyyppiID 
where b.TutkintonimikeID is null
and c.Koodi in ('1', '2', '3', '4', '5', '6', '7')

select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '2005' as virhekoodi
, 'Ensisijaisuus puuttuu tutkinto-opiskelijan opiskeluoikeuksista' as kuvaus
, 'opiskelijaAvain' as avainsarake
, a.Avain
FROM Opiskelija AS a
WHERE 1=1
-- ei niiden opiskeluoikeuksien joukossa joihin liittyy ensisijaisuus
AND a.ID NOT IN (
 select o.OpiskelijaID
 from Opiskeluoikeus o
 inner join Op_oikeuden_ensisijaisuus e on e.OpiskeluoikeusID=o.ID
)
-- on tutkintoon johtava opiskeluoikeus
AND a.ID IN (
 select o.OpiskelijaID
 from Opiskeluoikeus o
 inner join Opiskeluoikeuden_tyyppi k on k.ID=o.Op_oikeuden_tyyppiID
 where 1=1
 -- NB! Vain yliopistot!
 --and k.Koodi in ('1','2','3','4','5','6','7')
 and k.Koodi in ('2','4','5','6','7')
 -- opiskeluoikeus ollut voimassa 1.8.2005 tai sen jälkeen
 --and '2005-08-01' between o.Alkamispaivamaara and isnull(o.Paattymispaivamaara,'9999-01-01')
 -- opiskeluoikeus ollut voimassa kuluvana vuonna
 and cast(year(getdate()) as varchar)+'-01-01' <= isnull(o.Paattymispaivamaara,'9999-01-01')
)


select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '2006' as virhekoodi
, 'Opiskelijalla on vain optio-tilassa oleva opiskeluoikeus' as kuvaus
, 'opiskelijaAvain' as avainsarake
, a.Avain
FROM Opiskelija a
WHERE 1=1
-- EI niiden joukossa, joilla on muu kuin OPTIO-tilassa oleva opiskeluoikeus
AND a.ID NOT IN (
	select o2.OpiskelijaID
	from Opiskeluoikeus o2
	inner join Op_oikeuteen_liittyva_tila ot2 on ot2.OpiskeluoikeusID=o2.ID
	inner join Opiskeluoikeuden_tila t2 on t2.ID=ot2.Op_oikeuden_tilaID
	where t2.Koodi<>'2'--optio
)
-- ... mutta on OPTIO-tilassa oleva opiskeluoikeus
AND a.ID IN (
	select o.OpiskelijaID
	from Opiskeluoikeus o
	inner join Op_oikeuteen_liittyva_tila ot on ot.OpiskeluoikeusID=o.ID
	inner join Opiskeluoikeuden_tila t on t.ID=ot.Op_oikeuden_tilaID
	where t.Koodi='2'--optio
)

-- NB! Käyttää "XML_SA"-tietoja (ei yhteinen tietomalli)
select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '2007' as virhekoodi
, 'Opiskeluoikeuden liittyvyys viittaa tietoon jota ei ole' as kuvaus
, 'opiskeluoikeusAvain' as avainsarake
, a.Avain
, coalesce((select top 1 p.avain from Opiskelija p where p.ID=a.OpiskelijaID),'#Puuttuu#') as opiskelijaAvain
from Opiskeluoikeus AS a
inner join XML_SA.Opiskeluoikeus_Liittyvyys SA on SA.Opiskeluoikeus_Id=a.ID
where SA.liittyvaOpiskeluoikeusAvain not in (
	SELECT b.avain FROM Opiskeluoikeus b
)


select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '2008' as virhekoodi
, 'Opiskeluoikeudella on monta myöntäjää' as kuvaus
, 'opiskeluoikeusAvain' as avainsarake
, a.Avain
, coalesce((select top 1 p.avain from Opiskelija p where p.ID=a.OpiskelijaID),'#Puuttuu#') as opiskelijaAvain
from Opiskeluoikeus a
inner join Op_oikeuden_organisaatio ag on ag.OpiskeluoikeusID=a.ID
inner join Organisaation_rooli as gr on gr.ID=ag.Organisaation_rooliID
where gr.Koodi='1' --myöntävä
group by a.OpiskelijaID, a.Avain having COUNT(*)>1

-- LUKUKAUSI-ILMOITTAUTUMINEN
select  GETDATE() as pvm
, 'PUUTE' as tyyppi
, '3001' as virhekoodi
, 'Oppilaitoksella muiden korkeakoulujen lukukausi-ilmoittautumisia' as kuvaus
, 'opiskelijaAvain # opiskseluoikeusAvain' as avainsarake
, substring(Avain, (charindex('#',avain)+1), (len(avain) - (charindex('#', reverse(avain)) + (charindex('#',avain)))))
from Lukukausi_ilmoittautuminen a
inner join Organisaatio as b on a.OrganisaatioID = b.id
and b.Koodi not in (select OrganisaatioKoodi from Yhteiset.Asetukset.Instanssit where db = 'CSC')

-- OPINTOSUORITUS
select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '4001' as virhekoodi
, 'Opintosuoritukselta puuttuu nimi' as kuvaus
, 'opintosuoritusAvain' as avainsarake
, a.Avain
FROM Opintosuoritus AS a
WHERE a.Nimi IS NULL
AND a.Avain NOT IN (
	select b.Avain from Kieliversio b
	where b.OminaisuusID in (
		select c.id from Ominaisuus c
		where c.Nimi='Nimi'
		and c.KasiteID in (
			select d.ID from Kasite d
			where d.Nimi='Opintosuoritus'
		)
	)
)

select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '4002' as virhekoodi
, 'Opintosuoritukselta puuttuu arvosana' as kuvaus
, 'opintosuoritusAvain' as avainsarake
, a.Avain
FROM Opintosuoritus AS a
WHERE a.ArvosanaID IS NULL

select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '4003' as virhekoodi
, 'Opintosuoritukselta puuttuu koulutusala' as kuvaus
, 'opintosuoritusAvain' as avainsarake
, a.Avain
FROM Opintosuoritus a
inner join Opintosuorituksen_laji sl on sl.ID=a.Opintosuorituksen_lajiID
WHERE a.ID NOT IN (
	SELECT OpintosuoritusID FROM Op_suor_koulutusala
)
AND sl.Koodi=2 -- muu opintosuoritus

select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '4005' as virhekoodi
, 'Opintosuoritukselta (laji: tutkinto) puuttuu tutkintonimike/koulutuskoodi' as kuvaus
, 'opintosuoritusAvain' as avainsarake
, a.Avain
FROM Opintosuoritus AS a
WHERE a.TutkintonimikeID IS NULL
AND a.Opintosuorituksen_lajiID = (
	SELECT ID FROM Opintosuorituksen_laji WHERE Koodi='1' --Tutkinto
)

-- jos AMK:
select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '4006' as virhekoodi
, 'Opintosuoritukselta puuttuu opiskeluoikeus' as kuvaus
, 'opintosuoritusAvain' as avainsarake
, a.avain
from opintosuoritus a
where a.opiskeluoikeusid is null

-- NB! Käytetään XML_SA-taulua hyväksi (_Id = .id)
-- Katsotaan vain vuoden 2006 ja jälkeen suoritettuja (bologna jne).
select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '4007' as virhekoodi
, 'Opintosuoritus virheellisellä sisältyvyyden avaintiedolla' as kuvaus
, 'opintosuoritusAvain' as avainsarake
, a.Avain
from Opintosuoritus AS a
inner join XML_SA.Opintosuoritus_Sisaltyvyys SA on SA.Opintosuoritus_Id=a.ID
where SA.sisaltyvaOpintosuoritusAvain not in (
	SELECT b.avain FROM Opintosuoritus b
)
and YEAR(a.Suorituspaivamaara) >= 2006

 
-- NB! Käyttää "XML_SA"-tietoja (ei yhteinen tietomalli)
select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '4008' as virhekoodi
, 'Opintosuorituksella on monta myöntäjää' as kuvaus
, 'opintosuoritusAvain' as avainsarake
, a.Avain
, coalesce((select top 1 p.avain from Opiskelija p where p.ID=a.OpiskelijaID),'#Puuttuu#') as opiskelijaAvain
from Opintosuoritus a
inner join Op_suorituksen_organisaatio ag on ag.OpintosuoritusID=a.ID
inner join Organisaation_rooli as gr on gr.ID=ag.Organisaation_rooliID
where gr.Koodi='1' --myöntävä
group by a.OpiskelijaID, a.Avain having COUNT(*)>1
 
--
-- LIIKKUVUUSJAKSOT
select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '5001' as virhekoodi
, 'Liikkuvuusjakson saapuvan opiskelijan koulutusaste suomalaisessa korkeakoulussa' as kuvaus
, 'liikkuvuusjaksoAvain' as avainsarake
, a.Avain
, coalesce((select top 1 p.avain from Opiskelija p where p.ID=a.OpiskelijaID),'#Puuttuu#') as opiskelijaAvain
FROM Liikkuvuusjakso AS a
INNER JOIN Liikkuvuuden_suunta AS ks on ks.ID=a.Liikkuvuuden_suuntaID
WHERE ks.Koodi='2' --Saapuva
AND a.Opiskeluoikeuden_tyyppiID IS NULL --"koulutusaste" puuttuu
AND GETDATE() > coalesce(a.Paattymispaivamaara,'9999-9-9') --päättynyt menneisyydessä


select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '5002' as virhekoodi
, 'Liikkuvuusjakson päättymispäivä on varhaisempi kuin alkamispäivä' as kuvaus
, 'liikkuvuusjaksoAvain' as avainsarake
, a.Avain
, coalesce((select top 1 p.avain from Opiskelija p where p.ID=a.OpiskelijaID),'#Puuttuu#') as opiskelijaAvain
-- ++
, a.db
, a.Alkamispaivamaara, a.Paattymispaivamaara
, DATEDIFF(day,a.alkamispaivamaara,coalesce(a.paattymispaivamaara,'9999-9-9'))
FROM Liikkuvuusjakso AS a
WHERE 1=1
AND a.Paattymispaivamaara < a.Alkamispaivamaara

select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '5003' as virhekoodi
, 'Liikkuvuusjakson liikkuvuusohjelma puuttuu 87 pv tai pidemmältä jaksolta' as kuvaus
, 'liikkuvuusjaksoAvain' as avainsarake
, a.Avain
, coalesce((select top 1 p.avain from Opiskelija p where p.ID=a.OpiskelijaID),'#Puuttuu#') as opiskelijaAvain
FROM Liikkuvuusjakso AS a
WHERE 1=1
-- Liikkuvuusohjelma puuttuu
AND a.LiikkuvuusohjelmaID is null
-- 87 pv tai enemmän kestänyt
AND DATEDIFF(day,a.Alkamispaivamaara,coalesce(a.Paattymispaivamaara,'9999-9-9')) >= 87
-- ei kuitenkaan liian varhaisia (2016 tai jälkeen *alkaneet* (vs voimassa olleet))
AND coalesce(a.Alkamispaivamaara,'1900-1-1') >= '2016-01-01'

select GETDATE() as pvm
, 'PUUTE' as tyyppi
, '5004' as virhekoodi
, 'Liikkuvuusjakson liikkuvuuden tyyppi puuttuu' as kuvaus
, 'liikkuvuusjaksoAvain' as avainsarake
, a.Avain
, coalesce((select top 1 p.avain from Opiskelija p where p.ID=a.OpiskelijaID),'#Puuttuu#') as opiskelijaAvain
FROM Liikkuvuusjakso AS a
WHERE 1=1
-- Liikkuvuuden tyyppi puuttuu
AND a.Liikkuvuuden_tyyppiID is null
-- ei kuitenkaan liian varhaisia (2016 tai jälkeen *alkaneet* (vs voimassa olleet))
AND coalesce(a.Alkamispaivamaara,'1900-1-1') >= '2016-01-01'

  • No labels