From 86ba9e6746f6c1d06bb6b9da9957683f14f9c423 Mon Sep 17 00:00:00 2001 From: Nils Martin Sande Date: Wed, 21 Aug 2024 13:06:10 +0200 Subject: [PATCH] =?UTF-8?q?Endret=20regel=20eval.=20til=20=C3=A5=20ikluder?= =?UTF-8?q?e=20en=20default=20regel=20som=20brukes=20n=C3=A5r=20ingen=20an?= =?UTF-8?q?dre=20regler=20sl=C3=A5r=20inn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/RequestValidator.kt | 9 ++++++--- .../application/regler/TilgangsRegler.kt | 7 ++++--- .../arbeidssokerregisteret/TilgansReglerTest.kt | 3 +++ .../utgang/pdl/kafka/ScheduleAvsluttPerioder.kt | 16 +++++++++------- .../application/InngangsRegler.kt | 7 ++++--- .../application/RegelExtensions.kt | 11 +++++++++-- 6 files changed, 35 insertions(+), 18 deletions(-) diff --git a/apps/api-start-stopp-perioder/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/RequestValidator.kt b/apps/api-start-stopp-perioder/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/RequestValidator.kt index dbeaf73c..864b77ec 100644 --- a/apps/api-start-stopp-perioder/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/RequestValidator.kt +++ b/apps/api-start-stopp-perioder/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/RequestValidator.kt @@ -7,6 +7,7 @@ import no.nav.paw.arbeidssokerregisteret.RequestScope import no.nav.paw.arbeidssokerregisteret.application.authfaktka.navAnsattTilgangFakta import no.nav.paw.arbeidssokerregisteret.application.authfaktka.tokenXPidFakta import no.nav.paw.arbeidssokerregisteret.application.opplysninger.* +import no.nav.paw.arbeidssokerregisteret.application.regler.standardTilgangsregel import no.nav.paw.arbeidssokerregisteret.application.regler.tilgangsReglerIPrioritertRekkefolge import no.nav.paw.arbeidssokerregisteret.domain.Identitetsnummer import no.nav.paw.arbeidssokerregisteret.services.AutorisasjonService @@ -31,7 +32,7 @@ class RequestValidator( } else { emptySet() } - return tilgangsReglerIPrioritertRekkefolge.evaluer(autentiseringsFakta) + return tilgangsReglerIPrioritertRekkefolge.evaluer(defaultRegel = standardTilgangsregel, autentiseringsFakta) } context(RequestScope) @@ -44,10 +45,12 @@ class RequestValidator( .flatMap { tilgangsResultat -> val person = personInfoService.hentPersonInfo(identitetsnummer.verdi) val opplysning = person?.let { genererPersonFakta(it) } ?: setOf(DomeneOpplysning.PersonIkkeFunnet) - reglerForInngangIPrioritertRekkefolge.evaluer(opplysning + tilgangsResultat.opplysning) + reglerForInngangIPrioritertRekkefolge.evaluer( + defaultRegel = standardInngangsregel, + opplysning + tilgangsResultat.opplysning + ) } - fun genererPersonFakta(person: Person): Set { require(person.foedsel.size <= 1) { "Personen har flere fødselsdatoer enn forventet" } require(person.bostedsadresse.size <= 1) { "Personen har flere bostedsadresser enn forventet" } diff --git a/apps/api-start-stopp-perioder/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/regler/TilgangsRegler.kt b/apps/api-start-stopp-perioder/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/regler/TilgangsRegler.kt index 902d77eb..ecf5e1dc 100644 --- a/apps/api-start-stopp-perioder/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/regler/TilgangsRegler.kt +++ b/apps/api-start-stopp-perioder/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/regler/TilgangsRegler.kt @@ -26,12 +26,13 @@ val tilgangsReglerIPrioritertRekkefolge: List = listOf( AnsattIkkeTilgangTilBruker( AuthOpplysning.AnsattIkkeTilgang, vedTreff = ::skalAvises - ), - IkkeTilgang( - vedTreff = ::muligGrunnlagForAvvisning ) ) +val standardTilgangsregel = IkkeTilgang( + vedTreff = ::skalAvises +) + sealed interface AuthRegelId: RegelId data object IkkeTilgang : AuthRegelId { diff --git a/apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/TilgansReglerTest.kt b/apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/TilgansReglerTest.kt index 2c4e2a58..0d70f79b 100644 --- a/apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/TilgansReglerTest.kt +++ b/apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/TilgansReglerTest.kt @@ -11,12 +11,14 @@ import no.nav.paw.arbeidssokerregisteret.application.authfaktka.AuthOpplysning.I import no.nav.paw.arbeidssokerregisteret.application.opplysninger.DomeneOpplysning import no.nav.paw.arbeidssokerregisteret.application.regler.AnsattHarTilgangTilBruker import no.nav.paw.arbeidssokerregisteret.application.regler.IkkeAnsattOgForhaandsgodkjentAvAnsatt +import no.nav.paw.arbeidssokerregisteret.application.regler.standardTilgangsregel import no.nav.paw.arbeidssokerregisteret.application.regler.tilgangsReglerIPrioritertRekkefolge class TilgansReglerTest : FreeSpec({ "eval av tilgang skal gi" - { "ugydlig request ved IKKE_ANSATT kombinert med GODKJENT_AV_ANSATT" { val resultat = tilgangsReglerIPrioritertRekkefolge.evaluer( + standardTilgangsregel, setOf( IkkeAnsatt, DomeneOpplysning.ErForhaandsgodkjent @@ -27,6 +29,7 @@ class TilgansReglerTest : FreeSpec({ } "lovlig kombinasjon av ANSATT og FORHANDSGODKJENT_AV_ANSATT" { val resultat = tilgangsReglerIPrioritertRekkefolge.evaluer( + standardTilgangsregel, setOf( AnsattTilgang, DomeneOpplysning.ErForhaandsgodkjent diff --git a/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/ScheduleAvsluttPerioder.kt b/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/ScheduleAvsluttPerioder.kt index e7713914..991e21c9 100644 --- a/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/ScheduleAvsluttPerioder.kt +++ b/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/ScheduleAvsluttPerioder.kt @@ -14,11 +14,7 @@ import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.utils.negativeOpplysninger import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.utils.statusToOpplysningMap import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.utils.toAarsak import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.utils.toPerson -import no.nav.paw.arbeidssokerregisteret.application.GrunnlagForGodkjenning -import no.nav.paw.arbeidssokerregisteret.application.Problem -import no.nav.paw.arbeidssokerregisteret.application.evaluer -import no.nav.paw.arbeidssokerregisteret.application.hendelseOpplysningTilDomeneOpplysninger -import no.nav.paw.arbeidssokerregisteret.application.reglerForInngangIPrioritertRekkefolge +import no.nav.paw.arbeidssokerregisteret.application.* import no.nav.paw.arbeidssokerregisteret.intern.v1.Avsluttet import no.nav.paw.arbeidssokerregisteret.intern.v1.Hendelse import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Bruker @@ -152,8 +148,14 @@ private fun List.processResultsV2( .map { hendelseOpplysningTilDomeneOpplysninger(it) as no.nav.paw.arbeidssokerregisteret.application.opplysninger.Opplysning } .toSet() - val opplysningerEvaluering = reglerForInngangIPrioritertRekkefolge.evaluer(domeneOpplysninger) - val pdlEvaluering = reglerForInngangIPrioritertRekkefolge.evaluer(genererPersonFakta(person.toPerson())) + val opplysningerEvaluering = reglerForInngangIPrioritertRekkefolge.evaluer( + defaultRegel = standardInngangsregel, + domeneOpplysninger + ) + val pdlEvaluering = reglerForInngangIPrioritertRekkefolge.evaluer( + defaultRegel = standardInngangsregel, + genererPersonFakta(person.toPerson()) + ) val erForhaandsgodkjent = hendelseOpplysninger.contains(Opplysning.FORHAANDSGODKJENT_AV_ANSATT) diff --git a/domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/InngangsRegler.kt b/domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/InngangsRegler.kt index ddd451b6..01b31ea4 100644 --- a/domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/InngangsRegler.kt +++ b/domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/InngangsRegler.kt @@ -33,8 +33,9 @@ val reglerForInngangIPrioritertRekkefolge: List = listOf( ErOver18Aar, BosattEtterFregLoven, vedTreff = ::grunnlagForGodkjenning - ), - IkkeBosattINorgeIHenholdTilFolkeregisterloven( - vedTreff = ::muligGrunnlagForAvvisning ) ) + +val standardInngangsregel = IkkeBosattINorgeIHenholdTilFolkeregisterloven( + vedTreff = ::muligGrunnlagForAvvisning +) diff --git a/domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/RegelExtensions.kt b/domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/RegelExtensions.kt index 8c6585fd..38eb82a3 100644 --- a/domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/RegelExtensions.kt +++ b/domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/RegelExtensions.kt @@ -17,10 +17,17 @@ operator fun RegelId.invoke( fun Regel.evaluer(samletOpplysning: Iterable): Boolean = opplysninger.all { samletOpplysning.contains(it) } -fun List.evaluer(opplysninger: Iterable): Either = +/** + * Evaluerer en liste med regler mot en liste med opplysninger. Returnerer første regel som evalueres til sann, + * eller defaultRegel om ingen regler evalueres til sann. + */ +fun List.evaluer( + defaultRegel: Regel, + opplysninger: Iterable +): Either = filter { regel -> regel.evaluer(opplysninger) } .map { regel -> regel.vedTreff(opplysninger) } - .first() + .firstOrNull() ?: defaultRegel.vedTreff(opplysninger) fun domeneOpplysningTilHendelseOpplysning(opplysning: DomeneOpplysning): HendelseOpplysning = when (opplysning) {