Skip to content

Commit 703fa69

Browse files
authored
Merge pull request #719 from navikt/2025-15---Forbedre-reglene-for-permisjoner
2025 15 forbedre reglene for permisjoner
2 parents e7251dc + d3ab232 commit 703fa69

15 files changed

+619
-30
lines changed

src/main/kotlin/no/nav/medlemskap/regler/common/RegelId.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,13 @@ enum class RegelId(val identifikator: String, val avklaring: String, val neiBegr
7373
REGEL_32("32", "Har bruker hatt permisjon siste 12 måneder?", "Bruker har ikke hatt permisjon siste 12 måneder", "Bruker har hatt permisjon de siste 12 måneder"),
7474
REGEL_33("33", "Er summen av permisjonsdager mer enn 60 siste 12 måneder?", "Summen av permisjonsdager er ikke mer enn 60 siste 12 måneder", "summen av permisjonsdager er mer enn 60 siste 12 måneder?"),
7575
REGEL_34("34","Har bruker vært i minst 60 % stilling de siste 12 måneder?","Bruker har mindre enn 60% stilling de siste 12 måneder.","Bruker har 60% stilling eller mer de siste 12 måneder."),
76+
REGEL_50("50", "Har bruker bare èn periode med permisjon siste 12 mnd ", "Bruker har flere en bare èn periode med permisjon siste 12 mnd", "bruker har bare èn periode med permisjoner siste 12 mnnd?"),
77+
REGEL_51("51", "Er summen av permisjonsdager mer enn 60 siste 12 måneder?", "Summen av permisjonsdager er mer enn 60 siste 12 måneder", "summen av permisjonsdager er ikke mer enn 60 siste 12 måneder?"),
78+
REGEL_54("54", "Har Bruker en løpende permisjon på første dag for ytelse dato", "Bruker har ikke en løpende permisjon på første dag for ytelse dato", "Bruker har en løpende permisjon på første dag for ytelse dato?"),
79+
REGEL_55("55", "Har bruker hatt mer enn 60 dager permisjon siste 12 måneder","Bruker har IKKE hatt mer enn 60 dager permisjon siste 12 måneder","Bruker har hatt mer enn 60 dager permisjon siste 12 måneder"),
80+
REGEL_57("57", "Perioden med permisjon er ikke avsluttet for mer enn 30 dager før første dag syk OG/eller permisjonstypen er ikke foreldrepermisjon?", "Er perioden med permisjon avsluttet for mer enn 30 dager før første dag syk OG permisjonstypen er foreldrepermisjon?", "perioden med permisjon er avsluttet for mer enn 30 dager før første dag syk OG permisjonstypen er foreldrepermisjon?"),
81+
82+
7683
REGEL_35("35","Er bruker i et maritimt arbeidsforhold på tidspunktet inputdato minus 1 dag?"),
7784
REGEL_36("36","Har bruker hatt et sammenhengende maritimt arbeidsforhold på et NOR-skip i løpet av de siste 12 månedene?"),
7885
REGEL_42("42","Har bruker hatt et maritimt arbeidsforhold i løpet av siste 12 måneder? "),

src/main/kotlin/no/nav/medlemskap/regler/v1/RegelFactory.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ import no.nav.medlemskap.regler.common.Regel
55
import no.nav.medlemskap.regler.common.RegelId
66
import no.nav.medlemskap.regler.common.RegelId.*
77
import no.nav.medlemskap.regler.v1.arbeidsforhold.*
8+
import no.nav.medlemskap.regler.v1.arbeidsforhold.permisjon.ErPeriodeForPermissjonAvsluttetForMedEn30DagerSidenOgTypeForelderRegel
9+
import no.nav.medlemskap.regler.v1.arbeidsforhold.permisjon.ErSummenAvPermisjonenMerEnn60DagerSiste12Mnd_v2
10+
import no.nav.medlemskap.regler.v1.arbeidsforhold.permisjon.HarBrukerBareEnPeriodeMedPermisjonSiste12MndRegel
11+
import no.nav.medlemskap.regler.v1.arbeidsforhold.permisjon.HarBrukerHattMerEnn60DagerPermisjonSiste12MndRegel
12+
import no.nav.medlemskap.regler.v1.arbeidsforhold.permisjon.HarbrukerEnPeriodeMedPermisjonSomLøperPåForsteDagForYtelseRegel
813
import no.nav.medlemskap.regler.v1.frilanser.ErArbeidsforholdetFrilanserRegel
914
import no.nav.medlemskap.regler.v1.grunnforordningen.ErBrukerEøsBorgerRegel
1015
import no.nav.medlemskap.regler.v1.lovvalg.*
@@ -108,6 +113,11 @@ class RegelFactory(private val datagrunnlag: Datagrunnlag) {
108113
REGEL_35 -> ErBrukerIMaritimtArbeidsforholdDagenFørStartdatoForYtelse.fraDatagrunnlag(datagrunnlag).regel
109114
REGEL_36 -> HarSammenhengendeArbeidsforholdSiste12MånederPåNORSkip.fraDatagrunnlag(datagrunnlag).regel
110115
REGEL_42 -> HarMaritimtArbeidsforholdRegel.fraDatagrunnlag(datagrunnlag).regel
116+
REGEL_50 -> HarBrukerBareEnPeriodeMedPermisjonSiste12MndRegel.fraDatagrunnlag(datagrunnlag).regel
117+
REGEL_51 -> ErSummenAvPermisjonenMerEnn60DagerSiste12Mnd_v2.fraDatagrunnlag(datagrunnlag).regel
118+
REGEL_54 -> HarbrukerEnPeriodeMedPermisjonSomLøperPåForsteDagForYtelseRegel.fraDatagrunnlag(datagrunnlag).regel
119+
REGEL_55 -> HarBrukerHattMerEnn60DagerPermisjonSiste12MndRegel.fraDatagrunnlag(datagrunnlag).regel
120+
REGEL_57 -> ErPeriodeForPermissjonAvsluttetForMedEn30DagerSidenOgTypeForelderRegel.fraDatagrunnlag(datagrunnlag).regel
111121
else -> throw java.lang.RuntimeException("Ukjent regel: $regelId")
112122
}
113123
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package no.nav.medlemskap.regler.v1.arbeidsforhold.permisjon
2+
3+
import no.nav.medlemskap.domene.Datagrunnlag
4+
import no.nav.medlemskap.domene.Periode
5+
import no.nav.medlemskap.domene.Ytelse
6+
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold
7+
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold.Companion.hentAllePermisjonerSiden
8+
import no.nav.medlemskap.domene.arbeidsforhold.PermisjonPermitteringType
9+
import no.nav.medlemskap.regler.common.RegelId
10+
import no.nav.medlemskap.regler.common.Resultat
11+
import no.nav.medlemskap.regler.common.Resultat.Companion.ja
12+
import no.nav.medlemskap.regler.common.Resultat.Companion.nei
13+
import no.nav.medlemskap.regler.v1.arbeidsforhold.ArbeidsforholdRegel
14+
import java.time.LocalDate
15+
16+
class ErPeriodeForPermissjonAvsluttetForMedEn30DagerSidenOgTypeForelderRegel(
17+
ytelse: Ytelse,
18+
private val startDatoForYtelse: LocalDate,
19+
private val arbeidsforhold: List<Arbeidsforhold>,
20+
private val kontrollperiode: Periode,
21+
private val fnr: String,
22+
regelId: RegelId = RegelId.REGEL_57,
23+
) : ArbeidsforholdRegel(regelId, ytelse, startDatoForYtelse) {
24+
25+
override fun operasjon(): Resultat {
26+
27+
28+
val allePermisjonerSomLøperForMindreEnEtÅrSiden = arbeidsforhold.hentAllePermisjonerSiden(startDatoForYtelse.minusYears(1))
29+
val permisjonerSomIkkeVarAvsluttet30DagerForForsteDagSykOgIkkeBarnePensjon =
30+
allePermisjonerSomLøperForMindreEnEtÅrSiden
31+
.filterNot {
32+
(it.periode.tom==null || it.periode.tom.isBefore(startDatoForYtelse.minusDays(30))
33+
&& it.type == PermisjonPermitteringType.PERMISJON_MED_FORELDREPENGER)
34+
35+
}
36+
37+
38+
39+
if (permisjonerSomIkkeVarAvsluttet30DagerForForsteDagSykOgIkkeBarnePensjon.isEmpty()){
40+
return ja(regelId)
41+
}
42+
return nei(regelId)
43+
44+
}
45+
46+
47+
companion object {
48+
49+
fun fraDatagrunnlag(datagrunnlag: Datagrunnlag): ErPeriodeForPermissjonAvsluttetForMedEn30DagerSidenOgTypeForelderRegel {
50+
return ErPeriodeForPermissjonAvsluttetForMedEn30DagerSidenOgTypeForelderRegel(
51+
ytelse = datagrunnlag.ytelse,
52+
startDatoForYtelse = datagrunnlag.startDatoForYtelse,
53+
arbeidsforhold = datagrunnlag.arbeidsforhold,
54+
kontrollperiode = Periode(datagrunnlag.periode.fom, datagrunnlag.periode.tom),
55+
fnr = datagrunnlag.fnr,
56+
)
57+
}
58+
}
59+
}
60+
61+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package no.nav.medlemskap.regler.v1.arbeidsforhold.permisjon
2+
3+
import no.nav.medlemskap.domene.Datagrunnlag
4+
import no.nav.medlemskap.domene.Periode
5+
import no.nav.medlemskap.domene.Ytelse
6+
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold
7+
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold.Companion.hentAllePermisjonerSiden
8+
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold.Companion.totaltantallDagerIKontrollPeriode
9+
import no.nav.medlemskap.regler.common.RegelId
10+
import no.nav.medlemskap.regler.common.Resultat
11+
import no.nav.medlemskap.regler.common.Resultat.Companion.ja
12+
import no.nav.medlemskap.regler.common.Resultat.Companion.nei
13+
import no.nav.medlemskap.regler.v1.arbeidsforhold.ArbeidsforholdRegel
14+
import java.time.LocalDate
15+
16+
class ErSummenAvPermisjonenMerEnn60DagerSiste12Mnd_v2(
17+
ytelse: Ytelse,
18+
private val startDatoForYtelse: LocalDate,
19+
private val arbeidsforhold: List<Arbeidsforhold>,
20+
private val kontrollperiode: Periode,
21+
private val fnr: String,
22+
regelId: RegelId = RegelId.REGEL_51,
23+
) : ArbeidsforholdRegel(regelId, ytelse, startDatoForYtelse) {
24+
25+
override fun operasjon(): Resultat {
26+
27+
28+
val allePermisjonerSomLøperForMindreEnEtÅrSiden = arbeidsforhold.hentAllePermisjonerSiden(startDatoForYtelse.minusYears(1))
29+
val totaltAntallDagerPermisjon = allePermisjonerSomLøperForMindreEnEtÅrSiden.totaltantallDagerIKontrollPeriode(kontrollPeriodeForArbeidsforhold)
30+
if (totaltAntallDagerPermisjon > 60){
31+
return ja(regelId)
32+
}
33+
return nei(regelId)
34+
35+
}
36+
37+
38+
companion object {
39+
40+
fun fraDatagrunnlag(datagrunnlag: Datagrunnlag): ErSummenAvPermisjonenMerEnn60DagerSiste12Mnd_v2 {
41+
return ErSummenAvPermisjonenMerEnn60DagerSiste12Mnd_v2(
42+
ytelse = datagrunnlag.ytelse,
43+
startDatoForYtelse = datagrunnlag.startDatoForYtelse,
44+
arbeidsforhold = datagrunnlag.arbeidsforhold,
45+
kontrollperiode = Periode(datagrunnlag.periode.fom, datagrunnlag.periode.tom),
46+
fnr = datagrunnlag.fnr,
47+
)
48+
}
49+
}
50+
}
51+
52+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package no.nav.medlemskap.regler.v1.arbeidsforhold.permisjon
2+
3+
import no.nav.medlemskap.domene.Datagrunnlag
4+
import no.nav.medlemskap.domene.Periode
5+
import no.nav.medlemskap.domene.Ytelse
6+
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold
7+
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold.Companion.hentAllePermisjonerSiden
8+
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold.Companion.totaltantallDagerIKontrollPeriode
9+
import no.nav.medlemskap.regler.common.RegelId
10+
import no.nav.medlemskap.regler.common.Resultat
11+
import no.nav.medlemskap.regler.common.Resultat.Companion.ja
12+
import no.nav.medlemskap.regler.common.Resultat.Companion.nei
13+
import no.nav.medlemskap.regler.v1.arbeidsforhold.ArbeidsforholdRegel
14+
import java.time.LocalDate
15+
16+
class HarBrukerBareEnPeriodeMedPermisjonSiste12MndRegel(
17+
ytelse: Ytelse,
18+
private val startDatoForYtelse: LocalDate,
19+
private val arbeidsforhold: List<Arbeidsforhold>,
20+
private val kontrollperiode: Periode,
21+
private val fnr: String,
22+
regelId: RegelId = RegelId.REGEL_50,
23+
) : ArbeidsforholdRegel(regelId, ytelse, startDatoForYtelse) {
24+
25+
override fun operasjon(): Resultat {
26+
27+
28+
val allePermisjonerSomLøperForMindreEnEtÅrSiden = arbeidsforhold.hentAllePermisjonerSiden(startDatoForYtelse.minusYears(1))
29+
if (allePermisjonerSomLøperForMindreEnEtÅrSiden.size <= 1){
30+
return ja(regelId)
31+
}
32+
return nei(regelId)
33+
34+
}
35+
36+
37+
companion object {
38+
39+
fun fraDatagrunnlag(datagrunnlag: Datagrunnlag): HarBrukerBareEnPeriodeMedPermisjonSiste12MndRegel {
40+
return HarBrukerBareEnPeriodeMedPermisjonSiste12MndRegel(
41+
ytelse = datagrunnlag.ytelse,
42+
startDatoForYtelse = datagrunnlag.startDatoForYtelse,
43+
arbeidsforhold = datagrunnlag.arbeidsforhold,
44+
kontrollperiode = Periode(datagrunnlag.periode.fom, datagrunnlag.periode.tom),
45+
fnr = datagrunnlag.fnr,
46+
)
47+
}
48+
}
49+
}
50+
51+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package no.nav.medlemskap.regler.v1.arbeidsforhold.permisjon
2+
3+
import no.nav.medlemskap.domene.Datagrunnlag
4+
import no.nav.medlemskap.domene.Periode
5+
import no.nav.medlemskap.domene.Ytelse
6+
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold
7+
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold.Companion.hentAllePermisjonerSiden
8+
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold.Companion.totaltantallDagerIKontrollPeriode
9+
import no.nav.medlemskap.regler.common.RegelId
10+
import no.nav.medlemskap.regler.common.Resultat
11+
import no.nav.medlemskap.regler.common.Resultat.Companion.ja
12+
import no.nav.medlemskap.regler.common.Resultat.Companion.nei
13+
import no.nav.medlemskap.regler.v1.arbeidsforhold.ArbeidsforholdRegel
14+
import java.time.LocalDate
15+
16+
class HarBrukerHattMerEnn60DagerPermisjonSiste12MndRegel(
17+
ytelse: Ytelse,
18+
private val startDatoForYtelse: LocalDate,
19+
private val arbeidsforhold: List<Arbeidsforhold>,
20+
private val kontrollperiode: Periode,
21+
private val fnr: String,
22+
regelId: RegelId = RegelId.REGEL_55,
23+
) : ArbeidsforholdRegel(regelId, ytelse, startDatoForYtelse) {
24+
25+
override fun operasjon(): Resultat {
26+
27+
28+
val allePermisjonerSomLøperForMindreEnEtÅrSiden = arbeidsforhold.hentAllePermisjonerSiden(startDatoForYtelse.minusYears(1))
29+
val totaltAntallDagerPermisjon = allePermisjonerSomLøperForMindreEnEtÅrSiden.totaltantallDagerIKontrollPeriode(kontrollPeriodeForArbeidsforhold)
30+
if (totaltAntallDagerPermisjon > 60){
31+
return ja(regelId)
32+
}
33+
return nei(regelId)
34+
35+
}
36+
37+
38+
companion object {
39+
40+
fun fraDatagrunnlag(datagrunnlag: Datagrunnlag): HarBrukerHattMerEnn60DagerPermisjonSiste12MndRegel {
41+
return HarBrukerHattMerEnn60DagerPermisjonSiste12MndRegel(
42+
ytelse = datagrunnlag.ytelse,
43+
startDatoForYtelse = datagrunnlag.startDatoForYtelse,
44+
arbeidsforhold = datagrunnlag.arbeidsforhold,
45+
kontrollperiode = Periode(datagrunnlag.periode.fom, datagrunnlag.periode.tom),
46+
fnr = datagrunnlag.fnr,
47+
)
48+
}
49+
}
50+
}
51+
52+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package no.nav.medlemskap.regler.v1.arbeidsforhold.permisjon
2+
3+
import no.nav.medlemskap.domene.Datagrunnlag
4+
import no.nav.medlemskap.domene.Periode
5+
import no.nav.medlemskap.domene.Ytelse
6+
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold
7+
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold.Companion.hentAllePermisjonerSiden
8+
import no.nav.medlemskap.domene.arbeidsforhold.Arbeidsforhold.Companion.totaltantallDagerIKontrollPeriode
9+
import no.nav.medlemskap.regler.common.RegelId
10+
import no.nav.medlemskap.regler.common.Resultat
11+
import no.nav.medlemskap.regler.common.Resultat.Companion.ja
12+
import no.nav.medlemskap.regler.common.Resultat.Companion.nei
13+
import no.nav.medlemskap.regler.v1.arbeidsforhold.ArbeidsforholdRegel
14+
import java.time.LocalDate
15+
16+
class HarbrukerEnPeriodeMedPermisjonSomLøperPåForsteDagForYtelseRegel(
17+
ytelse: Ytelse,
18+
private val startDatoForYtelse: LocalDate,
19+
private val arbeidsforhold: List<Arbeidsforhold>,
20+
private val kontrollperiode: Periode,
21+
private val fnr: String,
22+
regelId: RegelId = RegelId.REGEL_54,
23+
) : ArbeidsforholdRegel(regelId, ytelse, startDatoForYtelse) {
24+
25+
override fun operasjon(): Resultat {
26+
27+
28+
val allePermisjonerSomLøperForMindreEnEtÅrSiden = arbeidsforhold.hentAllePermisjonerSiden(startDatoForYtelse.minusYears(1))
29+
val overlappendePermisjonFinnes =
30+
allePermisjonerSomLøperForMindreEnEtÅrSiden.map { it.periode }.none { it.overlapper(startDatoForYtelse) }
31+
32+
if (!overlappendePermisjonFinnes){
33+
return ja(regelId)
34+
}
35+
return nei(regelId)
36+
37+
}
38+
39+
40+
companion object {
41+
42+
fun fraDatagrunnlag(datagrunnlag: Datagrunnlag): HarbrukerEnPeriodeMedPermisjonSomLøperPåForsteDagForYtelseRegel {
43+
return HarbrukerEnPeriodeMedPermisjonSomLøperPåForsteDagForYtelseRegel(
44+
ytelse = datagrunnlag.ytelse,
45+
startDatoForYtelse = datagrunnlag.startDatoForYtelse,
46+
arbeidsforhold = datagrunnlag.arbeidsforhold,
47+
kontrollperiode = Periode(datagrunnlag.periode.fom, datagrunnlag.periode.tom),
48+
fnr = datagrunnlag.fnr,
49+
)
50+
}
51+
}
52+
}
53+
54+

src/main/kotlin/no/nav/medlemskap/regler/v1/regelflyt/arbeid/ReglerForPermisjoner.kt

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,38 @@ class ReglerForPermisjoner(
1818
) : Regler(ytelse, regelFactory, overstyrteRegler) {
1919

2020
override fun hentHovedflyt(): Regelflyt {
21-
val ErSummenAvPermisjonenMerEnn60DagerSiste12Mnd = lagRegelflyt(
22-
regel = hentRegel(REGEL_33),
21+
22+
23+
val HarBrukerHattMerEn60DagerPermisjonSiste12Mnd = lagRegelflyt(
24+
regel = hentRegel(REGEL_55),
2325
hvisJa = konklusjonUavklart(ytelse, REGEL_PERMISJONER),
24-
hvisNei = regelflytJa(ytelse, REGEL_PERMISJONER),
26+
hvisNei = regelflytJa(ytelse, REGEL_PERMISJONER),
27+
)
28+
29+
val ErPeriodeMedEn30DagerSidenOgForeldrePermisjon = lagRegelflyt(
30+
regel = hentRegel(REGEL_57),
31+
hvisJa = regelflytJa(ytelse, REGEL_PERMISJONER),
32+
hvisNei =konklusjonUavklart(ytelse, REGEL_PERMISJONER),
2533
)
2634

27-
val HarBrukerPermisjonSiste12MånederFlyt = lagRegelflyt(
28-
regel = hentRegel(REGEL_32),
29-
hvisJa = ErSummenAvPermisjonenMerEnn60DagerSiste12Mnd,
35+
val HarBrukerEnPeriodeMedPermisjonNaa = lagRegelflyt(
36+
regel = hentRegel(REGEL_54),
37+
hvisJa = HarBrukerHattMerEn60DagerPermisjonSiste12Mnd,
38+
hvisNei = ErPeriodeMedEn30DagerSidenOgForeldrePermisjon,
39+
)
40+
41+
val ErSummenAvPermisjonerMerEn60Dager = lagRegelflyt(
42+
regel = hentRegel(REGEL_51),
43+
hvisJa = konklusjonUavklart(ytelse, REGEL_PERMISJONER),
3044
hvisNei = regelflytJa(ytelse, REGEL_PERMISJONER),
3145
)
32-
return HarBrukerPermisjonSiste12MånederFlyt
46+
47+
val HarBrukerBareEPeriodeMedPensjon = lagRegelflyt(
48+
regel = hentRegel(REGEL_50),
49+
hvisJa = HarBrukerEnPeriodeMedPermisjonNaa,
50+
hvisNei = ErSummenAvPermisjonerMerEn60Dager,
51+
)
52+
return HarBrukerBareEPeriodeMedPensjon
3353
}
3454

3555
companion object {

0 commit comments

Comments
 (0)