Skip to content

Commit

Permalink
Parsi Patevyys-tieto
Browse files Browse the repository at this point in the history
  • Loading branch information
hruoho committed Jan 2, 2025
1 parent 32638af commit f49d0c6
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 2 deletions.
5 changes: 4 additions & 1 deletion src/main/scala/fi/oph/koski/schema/Korkeakoulu.scala
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,10 @@ case class KorkeakoulunOpiskeluoikeudenLisätiedot(
lukukausiIlmoittautuminen: Option[Lukukausi_Ilmoittautuminen] = None,
järjestäväOrganisaatio: Option[Oppilaitos] = None,
@Title("Koulutuskunnat")
koulutuskuntaJaksot: List[KoulutuskuntaJakso] = Nil
koulutuskuntaJaksot: List[KoulutuskuntaJakso] = Nil,
@Title("Opettajanpätevyys")
@KoodistoUri("virtapatevyys")
opettajapatevyys: Option[List[Koodistokoodiviite]],
) extends OpiskeluoikeudenLisätiedot {
def ensisijaisuusVoimassa(d: LocalDate): Boolean = ensisijaisuus.exists(_.exists((j: Aikajakso) => j.contains(d)))
}
Expand Down
12 changes: 11 additions & 1 deletion src/main/scala/fi/oph/koski/virta/VirtaXMLConverter.scala
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ case class VirtaXMLConverter(oppilaitosRepository: OppilaitosRepository, koodist
.flatMap(v => parseLuokittelu(v, "virtaopiskeluoikeudenluokittelu"))
.toList

def opettajaPatevyysJaksolta(opiskeluoikeusNode: Node): List[Koodistokoodiviite] = (opiskeluoikeusNode \ "Jakso")
.flatMap(v => parsePatevyys(v, "virtapatevyys"))
.toList

val (orphans, opiskeluoikeudet) = opiskeluoikeusNodes.foldLeft((suoritusRoots, Nil: List[KorkeakoulunOpiskeluoikeus])) { case ((suoritusRootsLeft, opiskeluOikeudet), opiskeluoikeusNode) =>
virheet = ListBuffer[VirtaVirhe]()
val (opiskeluOikeudenSuoritukset: List[Node], muutSuoritukset: List[Node]) = suoritusRootsLeft.partition(sisältyyOpiskeluoikeuteen(_, opiskeluoikeusNode, suoritusNodeList, None))
Expand Down Expand Up @@ -76,7 +80,9 @@ case class VirtaXMLConverter(oppilaitosRepository: OppilaitosRepository, koodist
lukukausiIlmoittautuminen = lukukausiIlmoittautuminen(oppilaitos, opiskeluoikeudenTila, avain(opiskeluoikeusNode), virtaXml),
järjestäväOrganisaatio = järjestäväOrganisaatio(opiskeluoikeusNode, oppilaitoksenNimiPäivä),
maksettavatLukuvuosimaksut = Some(lukuvuosimaksut),
koulutuskuntaJaksot = koulutuskuntajaksot(opiskeluoikeusNode)
koulutuskuntaJaksot = koulutuskuntajaksot(opiskeluoikeusNode),
opettajapatevyys = noneIfEmpty(opettajaPatevyysJaksolta(opiskeluoikeusNode) ++ suoritusNodeList.flatMap(v => parsePatevyys(v, "virtapatevyys")))
.map(_.distinct.sortBy(_.koodiarvo))
)),
virtaVirheet = virheet.toList,
luokittelu = noneIfEmpty(opiskeluoikeudenLuokittelu(opiskeluoikeusNode))
Expand Down Expand Up @@ -367,6 +373,10 @@ case class VirtaXMLConverter(oppilaitosRepository: OppilaitosRepository, koodist
.map(_.text).filter(s => s.nonEmpty && s.toInt > 0).toList
.map(l => koodistoViitePalvelu.validateRequired(koodistoUri, l))

private def parsePatevyys(parentNode: Node, koodistoUri: String): List[Koodistokoodiviite] = (parentNode \ "Patevyys")
.map(_.text).filter(s => s.nonEmpty && s.length == 2).toList
.map(l => koodistoViitePalvelu.validateRequired(koodistoUri, l))

private def laajuudetYhteensä(osasuoritukset: List[KorkeakoulunOpintojaksonSuoritus]) = {
val laajuudet = osasuoritukset.flatMap(_.koulutusmoduuli.laajuus).map(_.arvo.toDouble).map(BigDecimal(_))
if (laajuudet.isEmpty) {
Expand Down
15 changes: 15 additions & 0 deletions src/test/scala/fi/oph/koski/virta/VirtaXMLConverterSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ class VirtaXMLConverterSpec extends AnyFreeSpec with TestEnvironment with Matche
<virta:Luokittelu>{luokittelu.get}</virta:Luokittelu>
}
}
<virta:Patevyys>kl</virta:Patevyys>
<virta:Patevyys>aj</virta:Patevyys>
<virta:Patevyys>ob</virta:Patevyys>
</virta:Opintosuoritus>

val virtaOpiskeluoikeudet: Elem = opiskeluoikeusWithOrganisaatio(None)
Expand Down Expand Up @@ -112,6 +115,9 @@ class VirtaXMLConverterSpec extends AnyFreeSpec with TestEnvironment with Matche
<virta:Nimi kieli="fi">Nimi 2</virta:Nimi>
<virta:Nimi kieli="sv">Nimi 2</virta:Nimi>
<virta:Nimi kieli="en">Nimi 2</virta:Nimi>
<virta:Patevyys>ew</virta:Patevyys>
<virta:Patevyys>oa</virta:Patevyys>
<virta:Patevyys>ob</virta:Patevyys>
</virta:Jakso>
<virta:Laajuus>
<virta:Opintopiste>240</virta:Opintopiste>
Expand Down Expand Up @@ -175,6 +181,15 @@ class VirtaXMLConverterSpec extends AnyFreeSpec with TestEnvironment with Matche
}
}

"Patevyys" - {
"parsitaan opintosuorituksilta sekä jaksoilta ilman duplikaatteja" in {
val oo = converter.convertToOpiskeluoikeudet(opiskeluoikeusSuorituksella())
oo should have size (1)
val patevyydet = oo.head.lisätiedot.flatMap(_.opettajapatevyys.map(x => x.map(_.koodiarvo))).getOrElse(List())
patevyydet should equal(List("aj", "ew", "kl", "oa", "ob"))
}
}

"Lähdeorganisaatio" - {

"kun opiskeluoikeudella ei ole lähdeorganisaatiota" in {
Expand Down

0 comments on commit f49d0c6

Please sign in to comment.