Skip to content

Commit d217dd7

Browse files
committed
Fikset eu/eoes regler
1 parent 0fb2e02 commit d217dd7

File tree

10 files changed

+84
-28
lines changed

10 files changed

+84
-28
lines changed

apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/ApplicationPeriodeTest.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import no.nav.paw.arbeidssokerregisteret.application.opplysninger.DomeneOpplysni
1919
import no.nav.paw.arbeidssokerregisteret.plugins.configureHTTP
2020
import no.nav.paw.arbeidssokerregisteret.plugins.configureSerialization
2121
import no.nav.paw.arbeidssokerregisteret.routes.apiRegel
22-
import no.nav.paw.arbeidssokerregisteret.routes.arbeidssokerRoutes
2322
import no.nav.paw.arbeidssokerregisteret.routes.arbeidssokerRoutesV2
2423
import no.nav.paw.arbeidssokerregisteret.routes.feilmeldingVedAvvist
2524

@@ -39,7 +38,7 @@ class ApplicationPeriodeTest : FunSpec({
3938
} returns muligGrunnlagForAvvisning(
4039
regel = Regel(
4140
id = Under18Aar,
42-
opplysninger = listOf(DomeneOpplysning.ErUnder18Aar),
41+
kritierier = listOf(DomeneOpplysning.ErUnder18Aar),
4342
vedTreff = ::skalAvises
4443
),
4544
opplysninger = listOf(DomeneOpplysning.ErUnder18Aar, DomeneOpplysning.BosattEtterFregLoven)

apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/InngagnSomVeilederTest.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import no.nav.paw.arbeidssokerregisteret.auth.configureAuthentication
2525
import no.nav.paw.arbeidssokerregisteret.domain.Identitetsnummer
2626
import no.nav.paw.arbeidssokerregisteret.plugins.configureHTTP
2727
import no.nav.paw.arbeidssokerregisteret.plugins.configureSerialization
28-
import no.nav.paw.arbeidssokerregisteret.routes.arbeidssokerRoutes
2928
import no.nav.paw.arbeidssokerregisteret.routes.arbeidssokerRoutesV2
3029
import no.nav.security.mock.oauth2.MockOAuth2Server
3130

@@ -50,7 +49,7 @@ class InngagnSomVeilederTest : FreeSpec({
5049
} returns GrunnlagForGodkjenning(
5150
regel = Regel(
5251
id = AnsattHarTilgangTilBruker,
53-
opplysninger = emptyList(),
52+
kritierier = emptyList(),
5453
vedTreff = ::grunnlagForGodkjenning
5554
),
5655
opplysning = emptySet()

apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/InngangSomBrukerTest.kt

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package no.nav.paw.arbeidssokerregisteret
22

3-
import arrow.core.left
43
import arrow.core.nonEmptyListOf
54
import arrow.core.right
65
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
@@ -24,7 +23,6 @@ import no.nav.paw.arbeidssokerregisteret.auth.configureAuthentication
2423
import no.nav.paw.arbeidssokerregisteret.domain.Identitetsnummer
2524
import no.nav.paw.arbeidssokerregisteret.plugins.configureHTTP
2625
import no.nav.paw.arbeidssokerregisteret.plugins.configureSerialization
27-
import no.nav.paw.arbeidssokerregisteret.routes.arbeidssokerRoutes
2826
import no.nav.paw.arbeidssokerregisteret.routes.arbeidssokerRoutesV2
2927
import no.nav.security.mock.oauth2.MockOAuth2Server
3028

@@ -49,7 +47,7 @@ class InngangSomBrukerTest : FreeSpec({
4947
} returns GrunnlagForGodkjenning(
5048
regel = Regel(
5149
id = Over18AarOgBosattEtterFregLoven,
52-
opplysninger = emptyList(),
50+
kritierier = emptyList(),
5351
vedTreff = ::grunnlagForGodkjenning
5452
),
5553
opplysning = emptySet()
@@ -110,7 +108,7 @@ class InngangSomBrukerTest : FreeSpec({
110108
} returns skalAvises(
111109
regel = Regel(
112110
id = IkkeAnsattOgForhaandsgodkjentAvAnsatt,
113-
opplysninger = emptyList(),
111+
kritierier = emptyList(),
114112
vedTreff = ::skalAvises
115113
),
116114
opplysninger = emptySet()

apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/testdata/SvenskBrukerBosattISverigeUnder18aar.kt

-1
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ data object SvenskBrukerBosattISverigeUnder18aar : TestCase {
100100
Opplysning.IKKE_ANSATT,
101101
Opplysning.SAMME_SOM_INNLOGGET_BRUKER,
102102
Opplysning.INGEN_INFORMASJON_OM_OPPHOLDSTILLATELSE,
103-
Opplysning.ER_NORSK_STATSBORGER,
104103
Opplysning.DNUMMER,
105104
Opplysning.INGEN_FLYTTE_INFORMASJON
106105
)

domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/InngangsRegler.kt

+8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package no.nav.paw.arbeidssokerregisteret.application
22

33
import no.nav.paw.arbeidssokerregisteret.application.opplysninger.DomeneOpplysning.*
4+
import no.nav.paw.arbeidssokerregisteret.application.opplysninger.Opplysning
45

56
object InngangsRegler: Regler {
67
override val regler: List<Regel> = listOf(
@@ -49,6 +50,7 @@ object InngangsRegler: Regler {
4950
),
5051
IkkeBosattINorgeIHenholdTilFolkeregisterloven(
5152
!BosattEtterFregLoven,
53+
ErNorskEllerTredjelandsborger,
5254
vedTreff = ::muligGrunnlagForAvvisning
5355
)
5456
)
@@ -57,3 +59,9 @@ object InngangsRegler: Regler {
5759
vedTreff = ::muligGrunnlagForAvvisning
5860
)
5961
}
62+
63+
data object ErNorskEllerTredjelandsborger: Condition {
64+
override fun eval(opplysninger: Iterable<Opplysning>): Boolean =
65+
ErNorskStatsborger in opplysninger || ErEuEoesStatsborger !in opplysninger
66+
}
67+

domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/Regel.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import no.nav.paw.arbeidssokerregisteret.application.opplysninger.Opplysning
66
data class Regel(
77
val id: RegelId,
88
/**
9-
* Opplysninger som må være tilstede for at regelen skal være sann
9+
* Kritieries som må være oppfylt for at regelen skal være sann
1010
*/
11-
val opplysninger: List<Opplysning>,
11+
val kritierier: List<Condition>,
1212

1313
private val vedTreff: (Regel, Iterable<Opplysning>) -> Either<Problem, GrunnlagForGodkjenning>
1414
) {

domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/RegelExtensions.kt

+5-8
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,18 @@ import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Opplysning as HendelseOppl
77

88

99
operator fun RegelId.invoke(
10-
vararg opplysninger: Opplysning,
10+
vararg kriterier: Condition,
1111
vedTreff: (Regel, Iterable<Opplysning>) -> Either<Problem, GrunnlagForGodkjenning>
1212
) = Regel(
1313
id = this,
1414
vedTreff = vedTreff,
15-
opplysninger = opplysninger.toList()
15+
kritierier = kriterier.toList()
1616
)
1717

1818
fun Regel.evaluer(samletOpplysning: Iterable<Opplysning>): Boolean =
19-
opplysninger
20-
.filterNot { it is Not<*> }
21-
.all { samletOpplysning.contains(it) } &&
22-
opplysninger
23-
.filterIsInstance<Not<Opplysning>>()
24-
.none { samletOpplysning.contains(it.value) }
19+
kritierier.all {
20+
it.eval(samletOpplysning)
21+
}
2522

2623
/**
2724
* Evaluerer en liste med regler mot en liste med opplysninger. Returnerer første regel som evalueres til sann,

domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/Regler.kt

+6-5
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ interface Regler {
88
operator fun Opplysning.not(): Opplysning = HarIkke(this)
99
}
1010

11-
interface Not<A> {
12-
val value: A
13-
}
14-
15-
data class HarIkke(override val value: Opplysning) : Not<Opplysning>, Opplysning {
11+
data class HarIkke( val value: Opplysning) : Opplysning {
1612
override val id: String get() = "IKKE_${value.id}"
1713
override val beskrivelse: String get() = "IKKE_${value.beskrivelse}"
14+
override fun eval(opplysninger: Iterable<Opplysning>): Boolean = value !in opplysninger
15+
}
16+
17+
interface Condition {
18+
fun eval(opplysninger: Iterable<Opplysning>): Boolean
1819
}

domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/opplysninger/Opplysninger.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package no.nav.paw.arbeidssokerregisteret.application.opplysninger
22

3-
interface Opplysning {
3+
import no.nav.paw.arbeidssokerregisteret.application.Condition
4+
5+
interface Opplysning: Condition {
46
val id: String
57
val beskrivelse: String
8+
override fun eval(opplysninger: Iterable<Opplysning>): Boolean = this in opplysninger
69
}
710

8-
911
infix operator fun Opplysning.plus(opplysning: Opplysning): Set<Opplysning> = setOf(this, opplysning)
1012
sealed interface DomeneOpplysning: Opplysning {
1113

domain/arbeidssoeker-regler/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/application/RegelEvalTest.kt

+55-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import io.kotest.matchers.collections.shouldContainExactlyInAnyOrder
77
import io.kotest.matchers.should
88
import io.kotest.matchers.types.shouldBeInstanceOf
99
import no.nav.paw.arbeidssokerregisteret.application.opplysninger.DomeneOpplysning
10+
import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Opplysning
1011

1112
typealias Avvist = Either.Left<NonEmptyList<Problem>>
1213
typealias Godkjent = Either.Right<GrunnlagForGodkjenning>
@@ -44,6 +45,59 @@ class RegelEvalTest : FreeSpec({
4445
)
4546
}
4647
}
48+
"eu/eoes(men ikke Norsk statsborger) avvises med 'under 18 år' og 'ikke bosatt' når ikke bosatt etter f.reg. loven" {
49+
InngangsRegler.evaluer(
50+
listOf(
51+
DomeneOpplysning.ErUnder18Aar,
52+
DomeneOpplysning.IkkeBosatt,
53+
DomeneOpplysning.ErEuEoesStatsborger
54+
)
55+
) should { result ->
56+
result.shouldBeInstanceOf<Avvist>()
57+
result.value.map { problem -> problem.regel.id } shouldContainExactlyInAnyOrder listOf(
58+
Under18Aar,
59+
EuEoesStatsborgerMenHarStatusIkkeBosatt
60+
)
61+
}
62+
}
63+
}
64+
"er ikke norsk EU/EØS statsborger under 18 år med dnummer og ikke utflyttet" {
65+
InngangsRegler.evaluer(
66+
listOf(
67+
DomeneOpplysning.ErUnder18Aar,
68+
DomeneOpplysning.ErEuEoesStatsborger,
69+
DomeneOpplysning.HarUtenlandskAdresse,
70+
DomeneOpplysning.HarRegistrertAdresseIEuEoes,
71+
DomeneOpplysning.IngenInformasjonOmOppholdstillatelse,
72+
DomeneOpplysning.Dnummer,
73+
DomeneOpplysning.IngenFlytteInformasjon
74+
)
75+
) should { result ->
76+
result.shouldBeInstanceOf<Avvist>()
77+
result.value.map { problem -> problem.regel.id } shouldContainExactlyInAnyOrder listOf(
78+
Under18Aar
79+
)
80+
}
81+
}
82+
"er ikke norsl EU/EØS statsborger under 18 år med dnummer og utflyttet" {
83+
InngangsRegler.evaluer(
84+
listOf(
85+
DomeneOpplysning.ErUnder18Aar,
86+
DomeneOpplysning.ErEuEoesStatsborger,
87+
DomeneOpplysning.HarUtenlandskAdresse,
88+
DomeneOpplysning.HarRegistrertAdresseIEuEoes,
89+
DomeneOpplysning.IngenInformasjonOmOppholdstillatelse,
90+
DomeneOpplysning.Dnummer,
91+
DomeneOpplysning.IngenFlytteInformasjon,
92+
DomeneOpplysning.IkkeBosatt
93+
)
94+
) should { result ->
95+
result.shouldBeInstanceOf<Avvist>()
96+
result.value.map { problem -> problem.regel.id } shouldContainExactlyInAnyOrder listOf(
97+
Under18Aar,
98+
EuEoesStatsborgerMenHarStatusIkkeBosatt
99+
)
100+
}
47101
}
48102
"og er forhåndsgodkjent av veileder" - {
49103
"skal avvises når" - {
@@ -157,8 +211,7 @@ class RegelEvalTest : FreeSpec({
157211
) should { result ->
158212
result.shouldBeInstanceOf<Avvist>()
159213
result.value.map { it.regel.id } shouldContainExactlyInAnyOrder listOf(
160-
EuEoesStatsborgerMenHarStatusIkkeBosatt,
161-
IkkeBosattINorgeIHenholdTilFolkeregisterloven
214+
EuEoesStatsborgerMenHarStatusIkkeBosatt
162215
)
163216
}
164217
}

0 commit comments

Comments
 (0)