From 8a159e0577b5940799f8023b3e2875c8bf2be47a Mon Sep 17 00:00:00 2001 From: Nils Martin Sande Date: Tue, 10 Sep 2024 06:26:26 +0200 Subject: [PATCH] La inn versjonerte regler, samt egne 'oppholds' regler --- .../paw/arbeidssokerregisteret/Application.kt | 7 ++- .../RequestHandlerFactory.kt | 10 +++- .../application/RequestValidator.kt | 3 +- .../ApiV2TestCaseRunner.kt | 3 +- .../arbeidssokerregisteret/TestCaseContext.kt | 6 ++- .../application/RequestValidatorTest.kt | 8 +-- .../pdl/kafka/ScheduleAvsluttPerioder.kt | 11 ++-- .../pdl/kafka/processors/PeriodeProcessor.kt | 4 +- .../utgang/pdl/ProcessPdlResultsV2Test.kt | 17 +++--- .../application/InngangsReglerV1.kt | 43 +++++++++++++++ ...{InngangsRegler.kt => InngangsReglerV2.kt} | 2 +- .../application/OppholdsReglerV1.kt | 53 +++++++++++++++++++ .../application/RegelEvalTest.kt | 52 +++++++++++------- 13 files changed, 175 insertions(+), 44 deletions(-) create mode 100644 domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/InngangsReglerV1.kt rename domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/{InngangsRegler.kt => InngangsReglerV2.kt} (98%) create mode 100644 domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/OppholdsReglerV1.kt diff --git a/apps/api-start-stopp-perioder/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/Application.kt b/apps/api-start-stopp-perioder/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/Application.kt index 531d3f3b..c615263b 100644 --- a/apps/api-start-stopp-perioder/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/Application.kt +++ b/apps/api-start-stopp-perioder/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/Application.kt @@ -8,6 +8,7 @@ import io.ktor.server.routing.* import io.micrometer.prometheusmetrics.PrometheusConfig import io.micrometer.prometheusmetrics.PrometheusMeterRegistry import io.opentelemetry.api.trace.Span +import no.nav.paw.arbeidssokerregisteret.application.InngangsReglerV1 import no.nav.paw.arbeidssokerregisteret.application.OpplysningerRequestHandler import no.nav.paw.arbeidssokerregisteret.application.StartStoppRequestHandler import no.nav.paw.arbeidssokerregisteret.config.AuthProviders @@ -29,7 +30,11 @@ fun main() { logger.info("Starter ${ApplicationInfo.id}") val applicationConfig = loadNaisOrLocalConfiguration(CONFIG_FILE_NAME) val kafkaConfig = loadNaisOrLocalConfiguration(KAFKA_CONFIG) - val (startStoppRequestHandler, opplysningerRequestHandler) = requestHandlers(applicationConfig, KafkaFactory(kafkaConfig)) + val (startStoppRequestHandler, opplysningerRequestHandler) = requestHandlers( + config = applicationConfig, + kafkaFactory = KafkaFactory(kafkaConfig), + regler = InngangsReglerV1 + ) val server = embeddedServer( factory = Netty, port = 8080, diff --git a/apps/api-start-stopp-perioder/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/RequestHandlerFactory.kt b/apps/api-start-stopp-perioder/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/RequestHandlerFactory.kt index d1ce510c..b4fc9e67 100644 --- a/apps/api-start-stopp-perioder/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/RequestHandlerFactory.kt +++ b/apps/api-start-stopp-perioder/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/RequestHandlerFactory.kt @@ -3,6 +3,7 @@ package no.nav.paw.arbeidssokerregisteret import io.ktor.client.* import no.nav.common.token_client.client.AzureAdMachineToMachineTokenClient import no.nav.paw.arbeidssokerregisteret.application.OpplysningerRequestHandler +import no.nav.paw.arbeidssokerregisteret.application.Regler import no.nav.paw.arbeidssokerregisteret.application.StartStoppRequestHandler import no.nav.paw.arbeidssokerregisteret.application.RequestValidator import no.nav.paw.arbeidssokerregisteret.config.Config @@ -17,7 +18,11 @@ import no.nav.poao_tilgang.client.PoaoTilgangHttpClient import org.apache.kafka.common.serialization.LongSerializer -fun requestHandlers(config: Config, kafkaFactory: KafkaFactory): Pair { +fun requestHandlers( + config: Config, + kafkaFactory: KafkaFactory, + regler: Regler +): Pair { val clients = with(azureAdM2MTokenClient(config.naisEnv, config.authProviders.azure)) { clientsFactory(config) } @@ -29,7 +34,8 @@ fun requestHandlers(config: Config, kafkaFactory: KafkaFactory): Pair val person = personInfoService.hentPersonInfo(identitetsnummer.verdi) val opplysning = person?.let { genererPersonFakta(it) } ?: setOf(DomeneOpplysning.PersonIkkeFunnet) - InngangsRegler.evaluer( + regler.evaluer( opplysning + grunnlagForGodkjentAuth.opplysning ) } diff --git a/apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/ApiV2TestCaseRunner.kt b/apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/ApiV2TestCaseRunner.kt index fb91e162..a7d6edec 100644 --- a/apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/ApiV2TestCaseRunner.kt +++ b/apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/ApiV2TestCaseRunner.kt @@ -12,6 +12,7 @@ import io.ktor.server.auth.* import io.ktor.server.testing.* import io.mockk.mockk import no.nav.paw.arbeidssoekerregisteret.api.startstopp.models.FeilV2 +import no.nav.paw.arbeidssokerregisteret.application.InngangsReglerV2 import no.nav.paw.arbeidssokerregisteret.auth.configureAuthentication import no.nav.paw.arbeidssokerregisteret.plugins.configureHTTP import no.nav.paw.arbeidssokerregisteret.plugins.configureSerialization @@ -51,7 +52,7 @@ class ApiV2TestCaseRunner : FreeSpec({ val logger = LoggerFactory.getLogger(testCase::class.java) "Test API V2 ${testCase::class.simpleName?.readable()}" - { "Verifiser API V2" - { - with(initTestCaseContext()) { + with(initTestCaseContext(InngangsReglerV2)) { "Verifiser API response" { testApplication { application { diff --git a/apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/TestCaseContext.kt b/apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/TestCaseContext.kt index b27cf665..b8344c0e 100644 --- a/apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/TestCaseContext.kt +++ b/apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/TestCaseContext.kt @@ -1,6 +1,7 @@ package no.nav.paw.arbeidssokerregisteret import io.mockk.mockk +import no.nav.paw.arbeidssokerregisteret.application.Regler import no.nav.paw.arbeidssokerregisteret.application.RequestValidator import no.nav.paw.arbeidssokerregisteret.application.StartStoppRequestHandler import no.nav.paw.arbeidssokerregisteret.intern.v1.Hendelse @@ -23,7 +24,7 @@ data class TestCaseContext( val startStoppRequestHandler: StartStoppRequestHandler ) -fun initTestCaseContext(): TestCaseContext { +fun initTestCaseContext(regler: Regler): TestCaseContext { val autorisasjonService = mockk() val personInfoService = mockk() val producer: ProducerMock = ProducerMock() @@ -32,7 +33,8 @@ fun initTestCaseContext(): TestCaseContext { hendelseTopic = "any", requestValidator = RequestValidator( autorisasjonService = autorisasjonService, - personInfoService = personInfoService + personInfoService = personInfoService, + regler = regler ), producer = producer, kafkaKeysClient = kafkaKeys diff --git a/apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/application/RequestValidatorTest.kt b/apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/application/RequestValidatorTest.kt index f0c65b14..197fa2f4 100644 --- a/apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/application/RequestValidatorTest.kt +++ b/apps/api-start-stopp-perioder/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/application/RequestValidatorTest.kt @@ -47,7 +47,7 @@ class RequestValidatorTest : FreeSpec({ coEvery { autorisasjonService.verifiserVeilederTilgangTilBruker(any(), any()) } returns true - val requestValidator = RequestValidator(autorisasjonService, personInfoService) + val requestValidator = RequestValidator(autorisasjonService, personInfoService, InngangsReglerV2) "Når forhandsgodkjent av veileder er false" { val tilgangskontrollresultat = with(requestScope) { requestValidator.validerTilgang(identitsnummer) @@ -68,7 +68,7 @@ class RequestValidatorTest : FreeSpec({ coEvery { autorisasjonService.verifiserVeilederTilgangTilBruker(any(), any()) } returns false - val requestValidator = RequestValidator(autorisasjonService, personInfoService) + val requestValidator = RequestValidator(autorisasjonService, personInfoService, InngangsReglerV2) val tilgangskontrollresultat = with(requestScope) { requestValidator.validerTilgang(identitsnummer) @@ -86,7 +86,7 @@ class RequestValidatorTest : FreeSpec({ path = "test" ) val autorisasjonService: AutorisasjonService = mockk() - val requestValidator = RequestValidator(autorisasjonService, personInfoService) + val requestValidator = RequestValidator(autorisasjonService, personInfoService, InngangsReglerV2) "standardbruker" { val tilgangskontrollresultat = with(requestScope) { requestValidator.validerTilgang(identitsnummer) @@ -110,7 +110,7 @@ class RequestValidatorTest : FreeSpec({ "Når bruker er innlogget" - { val autorisasjonService: AutorisasjonService = mockk() - val requestValidator = RequestValidator(autorisasjonService, personInfoService) + val requestValidator = RequestValidator(autorisasjonService, personInfoService, InngangsReglerV2) "over 18 år og bosatt etter folketrygdloven" - { val requestScope = RequestScope( claims = ResolvedClaims() 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 91590924..7fe2afc2 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 @@ -52,6 +52,7 @@ fun scheduleAvsluttPerioder( pdlHentForenkletStatus: PdlHentForenkletStatus, pdlHentPersonBolk: PdlHentPerson, prometheusMeterRegistry: PrometheusMeterRegistry, + regler: Regler ): Cancellable = ctx.schedule(interval, PunctuationType.WALL_CLOCK_TIME) { val logger = LoggerFactory.getLogger("scheduleAvsluttPerioder") @@ -71,8 +72,9 @@ fun scheduleAvsluttPerioder( emptyList() } else { pdlHentPersonResults.processPdlResultsV2( - chunk, - logger + regler = regler, + chunk = chunk, + logger = logger ) } @@ -186,6 +188,7 @@ fun NonEmptyList.containsAnyOf(other: NonEmptyList): Boolean { } fun List.processPdlResultsV2( + regler: Regler, chunk: List>, logger: Logger ): List = @@ -196,8 +199,8 @@ fun List.processPdlResultsV2( val domeneOpplysninger = hendelseOpplysninger.toDomeneOpplysninger() - val opplysningerEvaluering = InngangsRegler.evaluer(domeneOpplysninger) - val pdlEvaluering = InngangsRegler.evaluer(genererPersonFakta(person.toPerson())) + val opplysningerEvaluering = regler.evaluer(domeneOpplysninger) + val pdlEvaluering = regler.evaluer(genererPersonFakta(person.toPerson())) val erForhaandsgodkjent = hendelseOpplysninger.erForhaandsGodkjent() diff --git a/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/processors/PeriodeProcessor.kt b/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/processors/PeriodeProcessor.kt index f914ba26..f6a72304 100644 --- a/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/processors/PeriodeProcessor.kt +++ b/apps/utgang-pdl/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/kafka/processors/PeriodeProcessor.kt @@ -6,6 +6,7 @@ import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.clients.pdl.PdlHentPerson import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.scheduleAvsluttPerioder import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.serdes.HendelseState import no.nav.paw.arbeidssokerregisteret.api.v1.Periode +import no.nav.paw.arbeidssokerregisteret.application.OppholdsReglerV1 import no.nav.paw.arbeidssokerregisteret.intern.v1.Hendelse import org.apache.kafka.streams.kstream.KStream import org.apache.kafka.streams.kstream.Named @@ -52,7 +53,8 @@ class PeriodeProcessor( Duration.ofHours(1), // TODO: sett tilbake til ofDays(1) etter å ha sammenlignet resultater pdlHentForenkletStatus, pdlHentPersonBolk, - prometheusMeterRegistry + prometheusMeterRegistry, + regler = OppholdsReglerV1 ) } diff --git a/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/ProcessPdlResultsV2Test.kt b/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/ProcessPdlResultsV2Test.kt index 56489743..be887587 100644 --- a/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/ProcessPdlResultsV2Test.kt +++ b/apps/utgang-pdl/src/test/kotlin/no/nav/paw/arbeidssoekerregisteret/utgang/pdl/ProcessPdlResultsV2Test.kt @@ -13,6 +13,7 @@ import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.getHendelseStateAndPe import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.isPdlResultOK import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.processPdlResultsV2 import no.nav.paw.arbeidssoekerregisteret.utgang.pdl.kafka.serdes.HendelseState +import no.nav.paw.arbeidssokerregisteret.application.OppholdsReglerV1 import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Opplysning import no.nav.paw.pdl.graphql.generated.hentpersonbolk.Foedsel import no.nav.paw.pdl.graphql.generated.hentpersonbolk.HentPersonBolkResult @@ -50,7 +51,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ ) val chunk = listOf(KeyValue(hendelseState.periodeId, hendelseState)) - val output = listOf(result).processPdlResultsV2(chunk, logger) + val output = listOf(result).processPdlResultsV2(OppholdsReglerV1, chunk, logger) output.shouldHaveSize(1) val evalueringResultat = output.first() @@ -84,7 +85,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ ) val chunk = listOf(KeyValue(hendelseState.periodeId, hendelseState)) - val output = listOf(result).processPdlResultsV2(chunk, logger) + val output = listOf(result).processPdlResultsV2(OppholdsReglerV1, chunk, logger) output.shouldHaveSize(1) val evalueringResultat = output.first() @@ -118,7 +119,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ ) val chunk = listOf(KeyValue(hendelseState.periodeId, hendelseState)) - val output = listOf(result).processPdlResultsV2(chunk, logger) + val output = listOf(result).processPdlResultsV2(OppholdsReglerV1, chunk, logger) output.shouldHaveSize(1) val evalueringResultat = output.first() @@ -154,7 +155,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ ) val chunk = listOf(KeyValue(hendelseState.periodeId, hendelseState)) - val output = listOf(result).processPdlResultsV2(chunk, logger) + val output = listOf(result).processPdlResultsV2(OppholdsReglerV1, chunk, logger) output.shouldHaveSize(1) val evalueringResultat = output.first() @@ -188,7 +189,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ ) val chunk = listOf(KeyValue(hendelseState.periodeId, hendelseState)) - val output = listOf(result).processPdlResultsV2(chunk, logger) + val output = listOf(result).processPdlResultsV2(OppholdsReglerV1, chunk, logger) output.shouldHaveSize(1) val evalueringResultat = output.first() @@ -225,7 +226,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ ) val chunk = listOf(KeyValue(hendelseState.periodeId, hendelseState)) - val output = listOf(result).processPdlResultsV2(chunk, logger) + val output = listOf(result).processPdlResultsV2(OppholdsReglerV1, chunk, logger) output.shouldHaveSize(1) val evalueringResultat = output.first() @@ -248,7 +249,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ val chunk = listOf>() - val output = results.processPdlResultsV2(chunk, logger) + val output = results.processPdlResultsV2(OppholdsReglerV1, chunk, logger) output.shouldBeEmpty() verify(exactly = 2) { logger.error(any()) } @@ -274,7 +275,7 @@ class ProcessPdlResultsV2Test : FreeSpec({ ) ) - val output = listOf(result).processPdlResultsV2(chunk, logger) + val output = listOf(result).processPdlResultsV2(OppholdsReglerV1, chunk, logger) output.shouldBeEmpty() verify { logger.error("Person er null for periodeId: $periodeId") } diff --git a/domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/InngangsReglerV1.kt b/domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/InngangsReglerV1.kt new file mode 100644 index 00000000..41009c03 --- /dev/null +++ b/domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/InngangsReglerV1.kt @@ -0,0 +1,43 @@ +package no.nav.paw.arbeidssokerregisteret.application + +import no.nav.paw.arbeidssokerregisteret.application.opplysninger.DomeneOpplysning.* + +object InngangsReglerV1: Regler { + override val regler: List = listOf( + IkkeFunnet( + PersonIkkeFunnet, + vedTreff = ::skalAvises + ), + Doed( + ErDoed, + vedTreff = ::skalAvises + ), + Savnet( + ErSavnet, + vedTreff = ::skalAvises + ), + ForhaandsgodkjentAvAnsatt( + ErForhaandsgodkjent, + vedTreff = ::grunnlagForGodkjenning + ), + Under18Aar( + ErUnder18Aar, + BosattEtterFregLoven, + vedTreff = ::muligGrunnlagForAvvisning + ), + UkjentAlder( + UkjentFoedselsaar, + UkjentFoedselsdato, + vedTreff = ::muligGrunnlagForAvvisning + ), + Over18AarOgBosattEtterFregLoven( + ErOver18Aar, + BosattEtterFregLoven, + vedTreff = ::grunnlagForGodkjenning + ) + ) + + override val standardRegel: Regel = IkkeBosattINorgeIHenholdTilFolkeregisterloven( + vedTreff = ::muligGrunnlagForAvvisning + ) +} 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/InngangsReglerV2.kt similarity index 98% rename from domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/InngangsRegler.kt rename to domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/InngangsReglerV2.kt index 2c20a8ff..6bec13fd 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/InngangsReglerV2.kt @@ -3,7 +3,7 @@ package no.nav.paw.arbeidssokerregisteret.application import no.nav.paw.arbeidssokerregisteret.application.opplysninger.DomeneOpplysning.* import no.nav.paw.arbeidssokerregisteret.application.opplysninger.Opplysning -object InngangsRegler: Regler { +object InngangsReglerV2: Regler { override val regler: List = listOf( IkkeFunnet( PersonIkkeFunnet, diff --git a/domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/OppholdsReglerV1.kt b/domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/OppholdsReglerV1.kt new file mode 100644 index 00000000..feac1dae --- /dev/null +++ b/domain/arbeidssoeker-regler/src/main/kotlin/no/nav/paw/arbeidssokerregisteret/application/OppholdsReglerV1.kt @@ -0,0 +1,53 @@ +package no.nav.paw.arbeidssokerregisteret.application + +import no.nav.paw.arbeidssokerregisteret.application.opplysninger.DomeneOpplysning.* + +object OppholdsReglerV1: Regler { + override val regler: List = listOf( + IkkeFunnet( + PersonIkkeFunnet, + vedTreff = ::skalAvises + ), + Doed( + ErDoed, + vedTreff = ::skalAvises + ), + Savnet( + ErSavnet, + vedTreff = ::skalAvises + ), + ForhaandsgodkjentAvAnsatt( + ErForhaandsgodkjent, + vedTreff = ::grunnlagForGodkjenning + ), + Under18Aar( + ErUnder18Aar, + vedTreff = ::muligGrunnlagForAvvisning + ), + UkjentAlder( + UkjentFoedselsaar, + UkjentFoedselsdato, + vedTreff = ::muligGrunnlagForAvvisning + ), + Over18AarOgBosattEtterFregLoven( + ErOver18Aar, + BosattEtterFregLoven, + vedTreff = ::grunnlagForGodkjenning + ), + EuEoesStatsborgerOver18Aar( + ErOver18Aar, + ErEuEoesStatsborger, + !ErNorskStatsborger, + vedTreff = ::grunnlagForGodkjenning + ), + IkkeBosattINorgeIHenholdTilFolkeregisterloven( + !BosattEtterFregLoven, + ErNorskEllerTredjelandsborger, + vedTreff = ::muligGrunnlagForAvvisning + ) + ) + + override val standardRegel: Regel = IkkeBosattINorgeIHenholdTilFolkeregisterloven( + vedTreff = ::muligGrunnlagForAvvisning + ) +} diff --git a/domain/arbeidssoeker-regler/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/application/RegelEvalTest.kt b/domain/arbeidssoeker-regler/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/application/RegelEvalTest.kt index 9ed19fd6..2b485da8 100644 --- a/domain/arbeidssoeker-regler/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/application/RegelEvalTest.kt +++ b/domain/arbeidssoeker-regler/src/test/kotlin/no/nav/paw/arbeidssokerregisteret/application/RegelEvalTest.kt @@ -7,7 +7,6 @@ import io.kotest.matchers.collections.shouldContainExactlyInAnyOrder import io.kotest.matchers.should import io.kotest.matchers.types.shouldBeInstanceOf import no.nav.paw.arbeidssokerregisteret.application.opplysninger.DomeneOpplysning -import no.nav.paw.arbeidssokerregisteret.intern.v1.vo.Opplysning typealias Avvist = Either.Left> typealias Godkjent = Either.Right @@ -17,7 +16,7 @@ class RegelEvalTest : FreeSpec({ "Person under 18 år" - { "ikke forhåndsgodkjent av veileder" - { "avvises selv om alt annet er ok" { - InngangsRegler.evaluer( + InngangsReglerV2.evaluer( listOf( DomeneOpplysning.ErUnder18Aar, DomeneOpplysning.BosattEtterFregLoven, @@ -31,8 +30,8 @@ class RegelEvalTest : FreeSpec({ ) } } - "avvises med 'under 18 år' og 'ikke bosatt' når ikke bosatt etter f.reg. loven" { - InngangsRegler.evaluer( + "avvises med 'under 18 år' og 'ikke bosatt' når ikke bosatt etter f.reg. loven og ingen statsborgerskap info" { + InngangsReglerV2.evaluer( listOf( DomeneOpplysning.ErUnder18Aar, DomeneOpplysning.IkkeBosatt @@ -45,8 +44,23 @@ class RegelEvalTest : FreeSpec({ ) } } + "Norsk statsborger avvises med 'under 18 år' og 'ikke bosatt' når ikke bosatt etter f.reg. loven" { + InngangsReglerV2.evaluer( + listOf( + DomeneOpplysning.ErUnder18Aar, + DomeneOpplysning.IkkeBosatt, + DomeneOpplysning.ErNorskStatsborger + ) + ) should { result -> + result.shouldBeInstanceOf() + result.value.map { problem -> problem.regel.id } shouldContainExactlyInAnyOrder listOf( + Under18Aar, + IkkeBosattINorgeIHenholdTilFolkeregisterloven + ) + } + } "eu/eoes(men ikke Norsk statsborger) avvises med 'under 18 år' og 'ikke bosatt' når ikke bosatt etter f.reg. loven" { - InngangsRegler.evaluer( + InngangsReglerV2.evaluer( listOf( DomeneOpplysning.ErUnder18Aar, DomeneOpplysning.IkkeBosatt, @@ -62,7 +76,7 @@ class RegelEvalTest : FreeSpec({ } } "er ikke norsk EU/EØS statsborger under 18 år med dnummer og ikke utflyttet" { - InngangsRegler.evaluer( + InngangsReglerV2.evaluer( listOf( DomeneOpplysning.ErUnder18Aar, DomeneOpplysning.ErEuEoesStatsborger, @@ -79,8 +93,8 @@ class RegelEvalTest : FreeSpec({ ) } } - "er ikke norsl EU/EØS statsborger under 18 år med dnummer og utflyttet" { - InngangsRegler.evaluer( + "er ikke norsk EU/EØS statsborger under 18 år med dnummer og utflyttet" { + InngangsReglerV2.evaluer( listOf( DomeneOpplysning.ErUnder18Aar, DomeneOpplysning.ErEuEoesStatsborger, @@ -102,7 +116,7 @@ class RegelEvalTest : FreeSpec({ "og er forhåndsgodkjent av veileder" - { "skal avvises når" - { "er doed" { - InngangsRegler.evaluer( + InngangsReglerV2.evaluer( listOf( DomeneOpplysning.ErDoed, DomeneOpplysning.ErForhaandsgodkjent, @@ -118,7 +132,7 @@ class RegelEvalTest : FreeSpec({ } } "er savnet" { - InngangsRegler.evaluer( + InngangsReglerV2.evaluer( listOf( DomeneOpplysning.ErSavnet, DomeneOpplysning.ErForhaandsgodkjent, @@ -134,7 +148,7 @@ class RegelEvalTest : FreeSpec({ } } "ikke funnet i PDL" { - InngangsRegler.evaluer( + InngangsReglerV2.evaluer( listOf( DomeneOpplysning.PersonIkkeFunnet ) @@ -148,7 +162,7 @@ class RegelEvalTest : FreeSpec({ } "skal godkjennes når" - { "ikke bosatt" { - InngangsRegler.evaluer( + InngangsReglerV2.evaluer( listOf( DomeneOpplysning.IkkeBosatt, DomeneOpplysning.ErUnder18Aar, @@ -159,7 +173,7 @@ class RegelEvalTest : FreeSpec({ } } "ingen informasjon om bosatt" { - InngangsRegler.evaluer( + InngangsReglerV2.evaluer( listOf( DomeneOpplysning.ErUnder18Aar, DomeneOpplysning.ErForhaandsgodkjent @@ -174,7 +188,7 @@ class RegelEvalTest : FreeSpec({ "Person over 18 år" - { "skal avvises når" - { "Norsk statsborger, ikke bosatt" { - InngangsRegler.evaluer( + InngangsReglerV2.evaluer( listOf( DomeneOpplysning.ErNorskStatsborger, DomeneOpplysning.ErEuEoesStatsborger, @@ -189,7 +203,7 @@ class RegelEvalTest : FreeSpec({ } } "3. lands borger, ikke bosatt" { - InngangsRegler.evaluer( + InngangsReglerV2.evaluer( listOf( DomeneOpplysning.ErOver18Aar, DomeneOpplysning.IkkeBosatt @@ -202,7 +216,7 @@ class RegelEvalTest : FreeSpec({ } } "EU/EØS borger (ikke Norsk) som har 'ikke bosatt'" { - InngangsRegler.evaluer( + InngangsReglerV2.evaluer( listOf( DomeneOpplysning.ErOver18Aar, DomeneOpplysning.ErEuEoesStatsborger, @@ -218,7 +232,7 @@ class RegelEvalTest : FreeSpec({ } "skal godkjennes når" - { "bosatt" { - InngangsRegler.evaluer( + InngangsReglerV2.evaluer( listOf( DomeneOpplysning.ErOver18Aar, DomeneOpplysning.BosattEtterFregLoven @@ -226,7 +240,7 @@ class RegelEvalTest : FreeSpec({ ).shouldBeInstanceOf() } "forhåndsgodkjent" { - InngangsRegler.evaluer( + InngangsReglerV2.evaluer( listOf( DomeneOpplysning.ErOver18Aar, DomeneOpplysning.IkkeBosatt, @@ -235,7 +249,7 @@ class RegelEvalTest : FreeSpec({ ).shouldBeInstanceOf() } "EU/EØS borger (ikke Norsk) som ikke har 'ikke bosatt'" { - InngangsRegler.evaluer( + InngangsReglerV2.evaluer( listOf( DomeneOpplysning.ErOver18Aar, DomeneOpplysning.ErEuEoesStatsborger