Skip to content

Commit

Permalink
refaktorerer regel 32 (#688)
Browse files Browse the repository at this point in the history
* refaktorerer regel 32

* Fjerner logstatements i permisjon funksjoner

---------

Co-authored-by: Stian S. Douzette <[email protected]>
  • Loading branch information
StianSDouzette and Stian S. Douzette authored Oct 31, 2024
1 parent 06488bc commit 2f756e4
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 50 deletions.
10 changes: 10 additions & 0 deletions src/main/kotlin/no/nav/medlemskap/domene/Periode.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,16 @@ data class Periode(
return (fomNotNull().isBefore(tomNotNull()) || fomNotNull().isEqual(tomNotNull()))
}

fun overlapper(annenPeriode: Kontrollperiode): Boolean {
val periode = Periode(annenPeriode.fom, annenPeriode.tom)
if (!erGyldigPeriode()) {
return false
}

return interval().overlaps(periode.interval())
}


fun overlapper(annenPeriode: Periode): Boolean {
if (!erGyldigPeriode()) {
return false
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
package no.nav.medlemskap.domene.arbeidsforhold

import mu.KotlinLogging
import net.logstash.logback.argument.StructuredArguments.kv
import no.nav.medlemskap.clients.ereg.Ansatte.Companion.finnesMindreEnn
import no.nav.medlemskap.common.*
import no.nav.medlemskap.domene.Kontrollperiode
import no.nav.medlemskap.domene.Periode
import no.nav.medlemskap.domene.Ytelse
import no.nav.medlemskap.domene.Ytelse.Companion.name
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold.Companion.harFlereArbeidsforholdIKontrollperiode
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold.Companion.harPermisjonerIKontrollPerioden
import no.nav.medlemskap.regler.common.Funksjoner.isNotNullOrEmpty
import no.nav.medlemskap.regler.common.erDatoerSammenhengende
import java.time.LocalDate
import java.time.temporal.ChronoUnit
import kotlin.math.abs

private val secureLogger = KotlinLogging.logger("tjenestekall")

data class Arbeidsforhold(
val periode: Periode,
val utenlandsopphold: List<Utenlandsopphold>?,
Expand Down Expand Up @@ -45,6 +51,33 @@ data class Arbeidsforhold(
companion object {
private val offentligSektorJuridiskeEnhetstyper = listOf("STAT", "FKF", "FYLK", "KF", "KOMM", "SF", "SÆR")

private fun loggTilInfoSecurelogs(melding: String, fnr: String) {
secureLogger.info(
melding,
kv("fnr", fnr)
)
}

fun harPermisjonerSiste12Måneder(
arbeidsforhold: List<Arbeidsforhold>,
kontrollPeriode: Kontrollperiode
): Boolean {
return if (arbeidsforhold.harKunEttArbeidsforholdMedPermisjoner(kontrollPeriode)) {
true
} else if (!arbeidsforhold.harNoenArbeidsforhold100ProsentPermisjonIKontrollPerioden(kontrollPeriode)) {
false
} else if (arbeidsforhold.finnOverlappendePermisjoner(kontrollPeriode).isEmpty()) {
false
} else {
true
}
}

fun List<Arbeidsforhold>.harKunEttArbeidsforholdMedPermisjoner(kontrollPeriode: Kontrollperiode): Boolean {
return this.harFlereArbeidsforholdIKontrollperiode(kontrollPeriode)
&& this.harPermisjonerIKontrollPerioden(kontrollPeriode)
}

fun harPermitteringerSiste12Måneder(
arbeidsforhold: List<Arbeidsforhold>,
kontrollPeriode: Kontrollperiode
Expand All @@ -65,29 +98,33 @@ data class Arbeidsforhold(
}
}

fun List<PermisjonPermittering>.totaltantallDager(): Int {
fun List<PermisjonPermittering>.totaltantallDager(): Int {

val antallDagerIHverPermisjon = this.map {
val fom = it.periode.fom ?: LocalDate.now().minusYears(1)
val tom = it.periode.tom ?: LocalDate.now()
ChronoUnit.DAYS.between(fom,tom)
ChronoUnit.DAYS.between(fom, tom)
}
return antallDagerIHverPermisjon.sum().toInt()
}

fun List<PermisjonPermittering>.totaltantallDagerIKontrollPeriode(kontrollPeriode: Kontrollperiode): Int {

val antallDagerIHverPermisjon = this.map {

var fom = kontrollPeriode.fom
if (it.periode.fom != null && it.periode.fom.isAfter(kontrollPeriode.periode.fom)){
if (it.periode.fom != null && it.periode.fom.isAfter(kontrollPeriode.periode.fom)) {
fom = it.periode.fom
}
val tom = it.periode.tom ?: LocalDate.now()
ChronoUnit.DAYS.between(fom,tom)
ChronoUnit.DAYS.between(fom, tom)
}
return antallDagerIHverPermisjon.sum().toInt()
}

fun List<Arbeidsforhold>.harFlereArbeidsforholdIKontrollperiode(kontrollPeriode: Kontrollperiode): Boolean {
return this.arbeidsforholdForKontrollPeriode(kontrollPeriode).size > 1
}

fun List<Arbeidsforhold>.alleAktiveYrkeskoderDerTomErNull(): List<String> {
return this.flatMap { arbeidsforhold ->
Expand All @@ -99,38 +136,41 @@ data class Arbeidsforhold(
fun List<Arbeidsforhold>.harPermisjonerIKontrollPerioden(kontrollPeriode: Kontrollperiode): Boolean {
return this.filter { it.harPermisjonerIKontrollPerioden(kontrollPeriode) }.isNotEmpty()
}
fun Arbeidsforhold.harPermisjonerIKontrollPerioden(kontrollPeriode: Kontrollperiode): Boolean {

fun Arbeidsforhold.harPermisjonerIKontrollPerioden(kontrollPeriode: Kontrollperiode): Boolean {
if (permisjonPermittering == null) {
return false
}
return permisjonPermittering.permisjonPermitteringerForKontrollPeriode(kontrollPeriode).filter { it.type != PermisjonPermitteringType.PERMITTERING }.isNotEmpty()
return permisjonPermittering.permisjonPermitteringerForKontrollPeriode(kontrollPeriode)
.filter { it.type != PermisjonPermitteringType.PERMITTERING }.isNotEmpty()
}

fun List<Arbeidsforhold>.harNoenArbeidsforhold100ProsentPermisjon(): Boolean {
return this.hentAllePermisjoner().any { it.prosent == 100.0 }
}

fun List<Arbeidsforhold>.harNoenArbeidsforhold100ProsentPermisjonIKontrollPerioden(kontrollPeriode: Kontrollperiode): Boolean {
return this.hentAllePermisjoner().permisjonPermitteringerForKontrollPeriode(kontrollPeriode).any { it.prosent == 100.0 }
return this.hentAllePermisjoner().permisjonPermitteringerForKontrollPeriode(kontrollPeriode)
.any { it.prosent == 100.0 }

}

fun List<Arbeidsforhold>.finnOverlappendePermisjoner(kontrollPeriode: Periode): List<PermisjonPermittering> {
fun List<Arbeidsforhold>.finnOverlappendePermisjoner(kontrollPeriode: Kontrollperiode): List<PermisjonPermittering> {
return this.hentAllePermisjoner().filter { it.periode.overlapper(kontrollPeriode) }
}



fun List<Arbeidsforhold>.hentAllePermisjoner(): List<PermisjonPermittering> {
val permisjoner: MutableList<PermisjonPermittering> = mutableListOf()
this.forEach {
if (it.permisjonPermittering != null) {
permisjoner.addAll(it.permisjonPermittering)
}
}
return permisjoner.filter { it.type!= PermisjonPermitteringType.PERMITTERING }
return permisjoner.filter { it.type != PermisjonPermitteringType.PERMITTERING }
}
fun List<Arbeidsforhold>.hentAllePermisjonerSiden(dato:LocalDate): List<PermisjonPermittering> {

fun List<Arbeidsforhold>.hentAllePermisjonerSiden(dato: LocalDate): List<PermisjonPermittering> {
val permisjoner: MutableList<PermisjonPermittering> = mutableListOf()
this.forEach {
if (it.permisjonPermittering != null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,59 +1,31 @@
package no.nav.medlemskap.regler.v1.arbeidsforhold

import mu.KotlinLogging
import net.logstash.logback.argument.StructuredArguments.kv
import no.nav.medlemskap.domene.Datagrunnlag
import no.nav.medlemskap.domene.Kontrollperiode
import no.nav.medlemskap.domene.Periode
import no.nav.medlemskap.domene.Ytelse
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold.Companion.finnOverlappendePermisjoner
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold.Companion.harNoenArbeidsforhold100ProsentPermisjon
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold.Companion.harNoenArbeidsforhold100ProsentPermisjonIKontrollPerioden
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold.Companion.harPermisjonerIKontrollPerioden
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold.Companion.harPermisjonerSiste12Måneder
import no.nav.medlemskap.regler.common.RegelId
import no.nav.medlemskap.regler.common.Resultat
import no.nav.medlemskap.regler.common.Resultat.Companion.ja
import no.nav.medlemskap.regler.common.Resultat.Companion.nei
import java.time.LocalDate

private val secureLogger = KotlinLogging.logger("tjenestekall")

class HarBrukerPermisjonSiste12Måneder(
ytelse: Ytelse,
private val startDatoForYtelse: LocalDate,
private val arbeidsforhold: List<Arbeidsforhold>,
private val kontrollperiode: Periode,
private val fnr: String,
regelId: RegelId = RegelId.REGEL_32,
) : ArbeidsforholdRegel(regelId, ytelse, startDatoForYtelse) {

override fun operasjon(): Resultat {
if (arbeidsforhold.size > 1) {
//32-d
if (arbeidsforhold.harPermisjonerIKontrollPerioden(kontrollPeriodeForArbeidsforhold)) {
secureLogger.info(
"Regelbrudd 32-d. Bruker har flere arbeidsforhold og permisjon.",
kv("fnr", fnr)
)
return ja(regelId)
}
return nei(regelId)
if (harPermisjonerSiste12Måneder(arbeidsforhold, kontrollPeriodeForArbeidsforhold)) {
return ja(regelId)
}

if (!arbeidsforhold.harNoenArbeidsforhold100ProsentPermisjonIKontrollPerioden(kontrollPeriodeForArbeidsforhold)) {

return nei(regelId)
}
//32-c
if (arbeidsforhold.finnOverlappendePermisjoner(kontrollperiode).isEmpty()) {
return nei(regelId)
}
secureLogger.info(
"Regelbrudd 32-c. Bruker har 100% permisjon i arbeidsforhold.",
kv("fnr", fnr)
)
return ja(regelId)
return nei(regelId)
}


Expand All @@ -63,9 +35,7 @@ class HarBrukerPermisjonSiste12Måneder(
return HarBrukerPermisjonSiste12Måneder(
ytelse = datagrunnlag.ytelse,
startDatoForYtelse = datagrunnlag.startDatoForYtelse,
arbeidsforhold = datagrunnlag.arbeidsforhold,
kontrollperiode = Periode(datagrunnlag.periode.fom, datagrunnlag.periode.tom),
fnr = datagrunnlag.fnr,
arbeidsforhold = datagrunnlag.arbeidsforhold
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class PermisjonPermiteringTest {

@Test
fun finnOverlappendePerioderTest_medLikKontrollperiodeSomPermisjonspermittering() {
val kontrollperiode = Periode(fom = LocalDate.now(), tom = LocalDate.now())
val kontrollperiode = Kontrollperiode(fom = LocalDate.now(), tom = LocalDate.now())
val permisjonPermittering = PermisjonPermittering(
Periode(fom = LocalDate.now(),
tom = LocalDate.now()),
Expand All @@ -29,7 +29,7 @@ class PermisjonPermiteringTest {

@Test
fun finnOverlappendePerioderTest_DerPermisjonpermitteringErForKontrollperiode() {
val kontrollperiode = Periode(fom = LocalDate.now(), tom = LocalDate.now())
val kontrollperiode = Kontrollperiode(fom = LocalDate.now(), tom = LocalDate.now())
val permisjonPermittering = PermisjonPermittering(
Periode(fom = LocalDate.now().minusYears(1),
tom = LocalDate.now().minusDays(1)),
Expand All @@ -45,7 +45,7 @@ class PermisjonPermiteringTest {
/*Sjekker overlappende eller samme dato.*/
@Test
fun finnOverlappendePerioderTest_DerPermisjonpermitteringStarterForKontrollperiodeOgEnderI() {
val kontrollperiode = Periode(fom = LocalDate.now(), tom = LocalDate.now())
val kontrollperiode = Kontrollperiode(fom = LocalDate.now(), tom = LocalDate.now())
val permisjonPermittering = PermisjonPermittering(
Periode(fom = LocalDate.now().minusYears(1),
tom = LocalDate.now()),
Expand All @@ -61,7 +61,7 @@ class PermisjonPermiteringTest {

@Test
fun finnOverlappendePerioderTest_DerPermisjonpermitteringStarterForKontrollperiodeOgEnderEtter() {
val kontrollperiode = Periode(fom = LocalDate.now(), tom = LocalDate.now())
val kontrollperiode = Kontrollperiode(fom = LocalDate.now(), tom = LocalDate.now())
val permisjonPermittering = PermisjonPermittering(
Periode(fom = LocalDate.now().minusYears(1),
tom = LocalDate.now().plusYears(1)),
Expand Down

0 comments on commit 2f756e4

Please sign in to comment.