From 4ee0f2482b7cf5e62975365660d231c2be30e050 Mon Sep 17 00:00:00 2001 From: Richard Martinsen Date: Mon, 13 Jan 2025 15:18:08 +0100 Subject: [PATCH 01/28] =?UTF-8?q?starte=20p=C3=A5=20en=20test=20for=20?= =?UTF-8?q?=C3=A5=20reprodusere=20feilen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Geir André Lund --- .../OpplysningerRepositoryPostgresTest.kt | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/repository/OpplysningerRepositoryPostgresTest.kt b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/repository/OpplysningerRepositoryPostgresTest.kt index c80582b37..b1c016bab 100644 --- a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/repository/OpplysningerRepositoryPostgresTest.kt +++ b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/repository/OpplysningerRepositoryPostgresTest.kt @@ -494,4 +494,61 @@ class OpplysningerRepositoryPostgresTest { slettOpplysninger shouldContainExactly listOf(cFaktum.id, bFaktum.id, aFaktum.id) } } + + @Test + fun `bugf ix`() { + withMigratedDb { + val repo = OpplysningerRepositoryPostgres() + val vaktmesterRepo = VaktmesterPostgresRepo() + + val a = Opplysningstype.somBoolsk("A") + val b = Opplysningstype.somBoolsk("B") + val c = Opplysningstype.somBoolsk("C") + val d = Opplysningstype.somBoolsk("D") + + val regelsett = + Regelsett("Regelsett") { + regel(a) { innhentes } + regel(d) { innhentes } + regel(b) { enAv(a) } + regel(c) { enAv(b, d) } + } + val opplysninger = Opplysninger() + val regelkjøring = Regelkjøring(LocalDate.now(), opplysninger, regelsett) + + val aFaktum = Faktum(a, true) + val dFaktum = Faktum(d, false) + opplysninger.leggTil(aFaktum) + opplysninger.leggTil(dFaktum) + regelkjøring.evaluer() + + repo.lagreOpplysninger(opplysninger) + + // ---- + val opplysninger2 = Opplysninger() + val regelkjøring2 = Regelkjøring(LocalDate.now(), opplysninger2, regelsett) + + val qFaktum = Faktum(a, true) + val wFaktum = Faktum(d, false) + opplysninger2.leggTil(qFaktum) + opplysninger2.leggTil(wFaktum) + regelkjøring2.evaluer() + + repo.lagreOpplysninger(opplysninger2) + + // ----- + + val endretAFaktum = Faktum(a, false) + opplysninger.leggTil(endretAFaktum).also { regelkjøring.evaluer() } + repo.lagreOpplysninger(opplysninger) + + // ------ + + val endretQFaktum = Faktum(a, false) + opplysninger2.leggTil(endretQFaktum).also { regelkjøring2.evaluer() } + repo.lagreOpplysninger(opplysninger2) + + vaktmesterRepo.slettOpplysninger().size shouldBe 6 + } + } } From b2912c064758e26e06f35f6fc8bae2c40ebd583c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Roaldseth?= Date: Tue, 14 Jan 2025 10:57:08 +0100 Subject: [PATCH 02/28] Lag kobling mellom regelsett og avklaring MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Endrer også listene av vilkår og fastsettelser til å peke til hvilke opplysninger som skal med. Co-authored-by: Tonje Mjøvik Myran Co-authored-by: Eivind Havnelid Røyrvik --- .../no/nav/dagpenger/avklaring/Avklaring.kt | 16 +--------------- .../no/nav/dagpenger/avklaring/Kontrollpunkt.kt | 1 + .../nav/dagpenger/avklaring/TestAvklaringer.kt | 2 ++ .../no/nav/dagpenger/regel/Avklaringspunkter.kt | 2 +- .../no/nav/dagpenger/regel/Minsteinntekt.kt | 4 ++++ .../mediator/api/BehandlingApiMapper.kt | 7 ++----- .../repository/AvklaringRepositoryPostgres.kt | 2 +- .../dagpenger/behandling/PersonMediatorTest.kt | 2 +- .../behandling/mediator/api/BehandlingApiTest.kt | 4 ++-- .../AvklaringRepositoryPostgresTest.kt | 2 +- openapi/src/main/resources/behandling-api.yaml | 11 ++++++++--- .../no/nav/dagpenger/opplysning/Avklaringkode.kt | 16 ++++++++++++++++ .../no/nav/dagpenger/opplysning/Regelsett.kt | 13 +++++++++---- 13 files changed, 49 insertions(+), 33 deletions(-) create mode 100644 opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Avklaringkode.kt diff --git a/avklaring/src/main/kotlin/no/nav/dagpenger/avklaring/Avklaring.kt b/avklaring/src/main/kotlin/no/nav/dagpenger/avklaring/Avklaring.kt index 43ba0a6f0..367b68379 100644 --- a/avklaring/src/main/kotlin/no/nav/dagpenger/avklaring/Avklaring.kt +++ b/avklaring/src/main/kotlin/no/nav/dagpenger/avklaring/Avklaring.kt @@ -3,27 +3,13 @@ package no.nav.dagpenger.avklaring import no.nav.dagpenger.avklaring.Avklaring.Endring.Avbrutt import no.nav.dagpenger.avklaring.Avklaring.Endring.Avklart import no.nav.dagpenger.avklaring.Avklaring.Endring.UnderBehandling +import no.nav.dagpenger.opplysning.Avklaringkode import no.nav.dagpenger.opplysning.Kilde import no.nav.dagpenger.opplysning.Saksbehandlerkilde import no.nav.dagpenger.uuid.UUIDv7 import java.time.LocalDateTime import java.util.UUID -data class Avklaringkode( - val kode: String, - val tittel: String, - val beskrivelse: String, - val kanKvitteres: Boolean = true, -) { - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (other !is Avklaringkode) return false - return kode == other.kode - } - - override fun hashCode() = kode.hashCode() -} - data class Avklaring internal constructor( val id: UUID, val kode: Avklaringkode, diff --git a/avklaring/src/main/kotlin/no/nav/dagpenger/avklaring/Kontrollpunkt.kt b/avklaring/src/main/kotlin/no/nav/dagpenger/avklaring/Kontrollpunkt.kt index d370ab99d..00f0f74c0 100644 --- a/avklaring/src/main/kotlin/no/nav/dagpenger/avklaring/Kontrollpunkt.kt +++ b/avklaring/src/main/kotlin/no/nav/dagpenger/avklaring/Kontrollpunkt.kt @@ -1,5 +1,6 @@ package no.nav.dagpenger.avklaring +import no.nav.dagpenger.opplysning.Avklaringkode import no.nav.dagpenger.opplysning.LesbarOpplysninger import no.nav.dagpenger.opplysning.LesbarOpplysningerMedLogg import java.time.LocalDateTime diff --git a/avklaring/src/test/kotlin/no/nav/dagpenger/avklaring/TestAvklaringer.kt b/avklaring/src/test/kotlin/no/nav/dagpenger/avklaring/TestAvklaringer.kt index 54b789bfd..9ded76321 100644 --- a/avklaring/src/test/kotlin/no/nav/dagpenger/avklaring/TestAvklaringer.kt +++ b/avklaring/src/test/kotlin/no/nav/dagpenger/avklaring/TestAvklaringer.kt @@ -1,5 +1,7 @@ package no.nav.dagpenger.avklaring +import no.nav.dagpenger.opplysning.Avklaringkode + object TestAvklaringer { val ArbeidIEØS = Avklaringkode( diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Avklaringspunkter.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Avklaringspunkter.kt index fa1551129..a8181c1a7 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Avklaringspunkter.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Avklaringspunkter.kt @@ -1,6 +1,6 @@ package no.nav.dagpenger.regel -import no.nav.dagpenger.avklaring.Avklaringkode +import no.nav.dagpenger.opplysning.Avklaringkode object Avklaringspunkter { val YtelserUtenforFolketrygden: Avklaringkode = diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt index 0c5ab3ee6..29dd59a6c 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt @@ -97,6 +97,10 @@ object Minsteinntekt { regel(over36mndTerskel) { størreEnnEllerLik(inntekt36, `36mndTerskel`) } regel(minsteinntekt) { enAv(over12mndTerskel, over36mndTerskel) } + + avklaring(Avklaringspunkter.SvangerskapsrelaterteSykepenger) + avklaring(Avklaringspunkter.InntektNesteKalendermåned) + avklaring(Avklaringspunkter.ØnskerEtterRapporteringsfrist) } private fun grunnbeløpFor(it: LocalDate) = diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt index f3e5a4211..2bfd9e0c1 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt @@ -94,11 +94,8 @@ private fun Regelsett.tilRegelsettDTO(opplysninger: List>): Regels return RegelsettDTO( navn, - avklaringer = emptyList(), - opplysninger = - produserer.map { opplysning -> - opplysning.tilOpplysningDTO() - }, + avklaringer = avklaringer().map { it.kode }, + opplysninger = produserer.map { opplysning -> opplysning.id }, ) } diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/AvklaringRepositoryPostgres.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/AvklaringRepositoryPostgres.kt index 2d8de1304..c6ae5b594 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/AvklaringRepositoryPostgres.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/AvklaringRepositoryPostgres.kt @@ -7,10 +7,10 @@ import no.nav.dagpenger.avklaring.Avklaring import no.nav.dagpenger.avklaring.Avklaring.Endring.Avbrutt import no.nav.dagpenger.avklaring.Avklaring.Endring.Avklart import no.nav.dagpenger.avklaring.Avklaring.Endring.UnderBehandling -import no.nav.dagpenger.avklaring.Avklaringkode import no.nav.dagpenger.behandling.db.PostgresDataSourceBuilder.dataSource import no.nav.dagpenger.behandling.mediator.repository.AvklaringRepositoryObserver.NyAvklaringHendelse import no.nav.dagpenger.behandling.modell.Behandling +import no.nav.dagpenger.opplysning.Avklaringkode import no.nav.dagpenger.opplysning.Saksbehandler import no.nav.dagpenger.opplysning.Saksbehandlerkilde import no.nav.dagpenger.uuid.UUIDv7 diff --git a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/PersonMediatorTest.kt b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/PersonMediatorTest.kt index bef2b560c..d4629140c 100644 --- a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/PersonMediatorTest.kt +++ b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/PersonMediatorTest.kt @@ -19,7 +19,6 @@ import io.kotest.matchers.nulls.shouldNotBeNull import io.kotest.matchers.shouldBe import io.mockk.mockk import no.nav.dagpenger.avklaring.Avklaring -import no.nav.dagpenger.avklaring.Avklaringkode import no.nav.dagpenger.behandling.db.Postgres.withMigratedDb import no.nav.dagpenger.behandling.konfigurasjon.skruAvFeatures import no.nav.dagpenger.behandling.mediator.BehovMediator @@ -44,6 +43,7 @@ import no.nav.dagpenger.behandling.modell.hendelser.AvklaringKvittertHendelse import no.nav.dagpenger.behandling.modell.hendelser.BesluttBehandlingHendelse import no.nav.dagpenger.behandling.modell.hendelser.GodkjennBehandlingHendelse import no.nav.dagpenger.behandling.modell.hendelser.SendTilbakeHendelse +import no.nav.dagpenger.opplysning.Avklaringkode import no.nav.dagpenger.opplysning.Saksbehandler import no.nav.dagpenger.regel.Behov.AndreØkonomiskeYtelser import no.nav.dagpenger.regel.Behov.Barnetillegg diff --git a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiTest.kt b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiTest.kt index f88270696..e68b8a2c4 100644 --- a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiTest.kt +++ b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiTest.kt @@ -24,7 +24,6 @@ import io.mockk.slot import io.mockk.spyk import io.mockk.verify import no.nav.dagpenger.avklaring.Avklaring -import no.nav.dagpenger.avklaring.Avklaringkode import no.nav.dagpenger.behandling.TestOpplysningstyper import no.nav.dagpenger.behandling.api.models.AvklaringDTO import no.nav.dagpenger.behandling.api.models.BehandlingDTO @@ -47,6 +46,7 @@ import no.nav.dagpenger.behandling.modell.hendelser.GodkjennBehandlingHendelse import no.nav.dagpenger.behandling.modell.hendelser.OpplysningSvarHendelse import no.nav.dagpenger.behandling.modell.hendelser.RekjørBehandlingHendelse import no.nav.dagpenger.behandling.modell.hendelser.SendTilbakeHendelse +import no.nav.dagpenger.opplysning.Avklaringkode import no.nav.dagpenger.opplysning.Faktum import no.nav.dagpenger.opplysning.Opplysninger import no.nav.dagpenger.opplysning.Saksbehandler @@ -253,7 +253,7 @@ internal class BehandlingApiTest { val behandlingDto = shouldNotThrowAny { objectMapper.readValue(response.bodyAsText(), BehandlingDTO::class.java) } behandlingDto.behandlingId shouldBe behandlingId behandlingDto.vilkår.shouldNotBeEmpty() - behandlingDto.vilkår.all { it.opplysninger.all { it.redigerbar } } shouldBe false + behandlingDto.opplysninger.all { it.redigerbar } shouldBe false behandlingDto.avklaringer.shouldNotBeEmpty() val aktivAvklaring = behandling.aktiveAvklaringer().first() diff --git a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/repository/AvklaringRepositoryPostgresTest.kt b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/repository/AvklaringRepositoryPostgresTest.kt index 4ae93660e..f59886e76 100644 --- a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/repository/AvklaringRepositoryPostgresTest.kt +++ b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/repository/AvklaringRepositoryPostgresTest.kt @@ -7,11 +7,11 @@ import io.kotest.matchers.types.shouldBeInstanceOf import no.nav.dagpenger.avklaring.Avklaring import no.nav.dagpenger.avklaring.Avklaring.Endring.UnderBehandling import no.nav.dagpenger.avklaring.Avklaringer -import no.nav.dagpenger.avklaring.Avklaringkode import no.nav.dagpenger.behandling.db.Postgres.withMigratedDb import no.nav.dagpenger.behandling.modell.Behandling import no.nav.dagpenger.behandling.modell.Behandling.TilstandType import no.nav.dagpenger.behandling.modell.hendelser.AvklaringKvittertHendelse +import no.nav.dagpenger.opplysning.Avklaringkode import no.nav.dagpenger.opplysning.Faktum import no.nav.dagpenger.opplysning.Opplysninger import no.nav.dagpenger.opplysning.Saksbehandler diff --git a/openapi/src/main/resources/behandling-api.yaml b/openapi/src/main/resources/behandling-api.yaml index 0aa55b3e3..63230ce4d 100644 --- a/openapi/src/main/resources/behandling-api.yaml +++ b/openapi/src/main/resources/behandling-api.yaml @@ -432,6 +432,7 @@ components: - vilkår - fastsettelser - avklaringer + - opplysninger properties: behandlingId: type: string @@ -501,7 +502,7 @@ components: type: string format: uuid kode: - type: string + $ref: '#/components/schemas/AvklaringKode' tittel: type: string beskrivelse: @@ -534,6 +535,9 @@ components: type: string format: uuid + AvklaringKode: + type: string + Regelsett: type: object required: @@ -548,12 +552,13 @@ components: enum: [ "Oppfylt", "HarAvklaring", "IkkeOppfylt", "Info" ] avklaringer: type: array + description: Hvilke avklaringer som skal vises i dette regelsettet items: - $ref: '#/components/schemas/Avklaring' + $ref: '#/components/schemas/AvklaringKode' opplysninger: type: array items: - $ref: '#/components/schemas/Opplysning' + $ref: '#/components/schemas/OpplysningsId' Opplysning: type: object diff --git a/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Avklaringkode.kt b/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Avklaringkode.kt new file mode 100644 index 000000000..90e2d19fb --- /dev/null +++ b/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Avklaringkode.kt @@ -0,0 +1,16 @@ +package no.nav.dagpenger.opplysning + +data class Avklaringkode( + val kode: String, + val tittel: String, + val beskrivelse: String, + val kanKvitteres: Boolean = true, +) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is Avklaringkode) return false + return kode == other.kode + } + + override fun hashCode() = kode.hashCode() +} diff --git a/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt b/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt index f4f7a0594..13d1f7d41 100644 --- a/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt +++ b/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt @@ -17,6 +17,7 @@ class Regelsett( constructor(navn: String, block: Regelsett.() -> Unit = {}) : this(navn, RegelsettType.Vilkår, block) private val regler: MutableMap, TemporalCollection>> = mutableMapOf() + private val avklaringer: MutableSet = mutableSetOf() init { block() @@ -24,10 +25,9 @@ class Regelsett( fun regler(forDato: LocalDate = LocalDate.MIN) = regler.map { it.value.get(forDato) }.toList() - private fun leggTil( - gjelderFra: LocalDate, - regel: Regel<*>, - ) = regler.computeIfAbsent(regel.produserer) { TemporalCollection() }.put(gjelderFra, regel) + fun avklaring(avklaringkode: Avklaringkode) = avklaringer.add(avklaringkode) + + fun avklaringer() = avklaringer.toList() fun > regel( produserer: Opplysningstype, @@ -35,6 +35,11 @@ class Regelsett( block: Opplysningstype.() -> Regel<*>, ) = leggTil(gjelderFraOgMed, produserer.block()) + private fun leggTil( + gjelderFra: LocalDate, + regel: Regel<*>, + ) = regler.computeIfAbsent(regel.produserer) { TemporalCollection() }.put(gjelderFra, regel) + val produserer: Set> by lazy { regler.map { it.key }.toSet() } From 28e032f1be074057f0f3021c7aa78f806b69558c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Andr=C3=A9=20Lund?= Date: Tue, 14 Jan 2025 11:08:21 +0100 Subject: [PATCH 03/28] =?UTF-8?q?Sletter=20opplysnigner=20innenfor=20samme?= =?UTF-8?q?=20opplysninger=5Fid.=20Satt=20en=20begrensing=20som=20kan=20st?= =?UTF-8?q?yres=20over=20hvor=20mange=20opplysninger=20som=20h=C3=B8rer=20?= =?UTF-8?q?til=20samme=20opplysninger=20liste=20som=20skal=20slettes.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Richard André Martinsen --- .../behandling/mediator/ApplicationBuilder.kt | 4 +- .../jobber/SlettFjernetOpplysninger.kt | 2 +- .../repository/VaktmesterPostgresRepo.kt | 85 ++++++++++++++----- .../behandling/PersonMediatorTest.kt | 6 ++ 4 files changed, 75 insertions(+), 22 deletions(-) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/ApplicationBuilder.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/ApplicationBuilder.kt index d5d8b085b..bae0df032 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/ApplicationBuilder.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/ApplicationBuilder.kt @@ -12,6 +12,7 @@ import no.nav.dagpenger.behandling.db.PostgresDataSourceBuilder.runMigration import no.nav.dagpenger.behandling.mediator.api.ApiMessageContext import no.nav.dagpenger.behandling.mediator.api.behandlingApi import no.nav.dagpenger.behandling.mediator.audit.ApiAuditlogg +import no.nav.dagpenger.behandling.mediator.jobber.SlettFjernetOpplysninger import no.nav.dagpenger.behandling.mediator.melding.PostgresHendelseRepository import no.nav.dagpenger.behandling.mediator.mottak.ArenaOppgaveMottak import no.nav.dagpenger.behandling.mediator.mottak.SakRepositoryPostgres @@ -20,6 +21,7 @@ import no.nav.dagpenger.behandling.mediator.repository.AvklaringRepositoryPostgr import no.nav.dagpenger.behandling.mediator.repository.BehandlingRepositoryPostgres import no.nav.dagpenger.behandling.mediator.repository.OpplysningerRepositoryPostgres import no.nav.dagpenger.behandling.mediator.repository.PersonRepositoryPostgres +import no.nav.dagpenger.behandling.mediator.repository.VaktmesterPostgresRepo import no.nav.dagpenger.behandling.objectMapper import no.nav.dagpenger.opplysning.Opplysningstype import no.nav.dagpenger.regel.RegelverkDagpenger @@ -80,7 +82,7 @@ internal class ApplicationBuilder( ArenaOppgaveMottak(rapidsConnection, SakRepositoryPostgres()) // Start jobb som sletter fjernet opplysninger - // SlettFjernetOpplysninger.slettOpplysninger(VaktmesterPostgresRepo()) + SlettFjernetOpplysninger.slettOpplysninger(VaktmesterPostgresRepo()) avklaringRepository.registerObserver( AvklaringKafkaObservatør( diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt index 8745e577c..3f08cdaa0 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt @@ -19,7 +19,7 @@ internal object SlettFjernetOpplysninger { action = { try { if (System.getenv("NAIS_CLUSTER_NAME") == "dev-gcp") { - vaktmesterRepository.slettOpplysninger().also { + vaktmesterRepository.slettOpplysninger(antall = 1).also { logger.info { "Har slettet ${it.size} fjernede opplysninger" } } } diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt index 63820e3bc..a98a7027f 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt @@ -14,48 +14,93 @@ private val logger = KotlinLogging.logger {} internal class VaktmesterPostgresRepo { companion object { val låsenøkkel = 121212 + private val logger = KotlinLogging.logger {} } - fun slettOpplysninger(): List { - val antall = mutableListOf() + fun slettOpplysninger(antall: Int = 10): List { + val slettet = mutableListOf() using(sessionOf(dataSource)) { session -> session.transaction { tx -> tx.medLås(låsenøkkel) { - hentAlleOpplysningerSomErFjernet(tx).forEach { opplysningId -> - slettOpplysningVerdi(opplysningId).run(tx) - slettOpplysningUtledet(opplysningId).run(tx) - slettOpplysningLink(opplysningId).run(tx) - slettOpplysningUtledning(opplysningId).run(tx) - slettErstatteAv(opplysningId).run(tx) - slettOpplysning(opplysningId).run(tx) - antall.add(opplysningId) + hentAlleOpplysningerSomErFjernet(tx, antall).forEach { opplysninger -> + opplysninger.forEach { opplysningId -> + val liste = mutableListOf() + liste.add(slettOpplysningVerdi(opplysningId)) + liste.add(slettOpplysningUtledet(opplysningId)) + liste.add(slettOpplysningLink(opplysningId)) + liste.add(slettOpplysningUtledning(opplysningId)) + liste.add(slettErstatteAv(opplysningId)) + liste.add(slettOpplysning(opplysningId)) + liste.forEach { batch -> + batch.run(tx) + } + slettet.add(opplysningId) + } } } } } - return antall + return slettet } - private fun hentAlleOpplysningerSomErFjernet(tx: TransactionalSession): List { + private fun hentAlleOpplysningerSomErFjernet( + tx: TransactionalSession, + antall: Int, + ): List> { + val opplysningerIder = hentOpplysningerIder(tx, antall) + //language=PostgreSQL val query = """ - SELECT * + SELECT id FROM opplysning - WHERE fjernet = true - ORDER BY opprettet DESC; + INNER JOIN opplysninger_opplysning op ON opplysning.id = op.opplysning_id + WHERE fjernet = true AND op.opplysninger_id = :opplysninger_id + ORDER BY op.opplysninger_id, opprettet DESC; """.trimIndent() + val opplysninger = + opplysningerIder.map { id -> + tx.run( + queryOf( + query, + mapOf("opplysninger_id" to id), + ).map { row -> + row.uuid("id") + }.asList, + ) + } + + logger.info { "Fant ${opplysninger.size} opplysninger som er fjernet og som skal slettes" } + return opplysninger + } + + private fun hentOpplysningerIder( + tx: TransactionalSession, + antall: Int, + ): List { + //language=PostgreSQL + val test = + """ + SELECT DISTINCT (op.opplysninger_id) AS opplysinger_id + FROM opplysning + INNER JOIN opplysninger_opplysning op ON opplysning.id = op.opplysning_id + WHERE fjernet = true + LIMIT :antall; + """.trimIndent() + + val opplysningerIder = tx.run( queryOf( - query, - mapOf("fjernet" to true), + test, + mapOf("antall" to antall), ).map { row -> - row.uuid("id") + row.uuid("opplysinger_id") }.asList, ) - logger.info { "Fant ${opplysninger.size} opplysninger som er fjernet og som skal slettes" } - return opplysninger + + logger.info { "Skal slette opplysninger tilhørende opplysinger_id: ${opplysningerIder.joinToString("\n") { it.toString() }}" } + return opplysningerIder } private fun slettErstatteAv(opplysningId: UUID) = diff --git a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/PersonMediatorTest.kt b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/PersonMediatorTest.kt index bef2b560c..f15b1ad73 100644 --- a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/PersonMediatorTest.kt +++ b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/PersonMediatorTest.kt @@ -33,6 +33,7 @@ import no.nav.dagpenger.behandling.mediator.repository.BehandlingRepositoryPostg import no.nav.dagpenger.behandling.mediator.repository.OpplysningerRepositoryPostgres import no.nav.dagpenger.behandling.mediator.repository.PersonRepository import no.nav.dagpenger.behandling.mediator.repository.PersonRepositoryPostgres +import no.nav.dagpenger.behandling.mediator.repository.VaktmesterPostgresRepo import no.nav.dagpenger.behandling.mediator.toMap import no.nav.dagpenger.behandling.modell.Behandling import no.nav.dagpenger.behandling.modell.Behandling.TilstandType.UnderOpprettelse @@ -521,6 +522,7 @@ internal class PersonMediatorTest { @Test fun `endring av prøvingsdato`() { withMigratedDb { + val vaktmester = VaktmesterPostgresRepo() val testPerson = TestPerson( ident, @@ -614,6 +616,10 @@ internal class PersonMediatorTest { withClue("Skal kun ha opplysninger nødvendig for avslag") { godkjennOpplysninger("avslag") } + + // Sletter opplysninger som ikke lenger er relevante + val slettedeOpplysninger = vaktmester.slettOpplysninger() + slettedeOpplysninger.shouldNotBeEmpty() } } From 66e6e646a314a9d02f3b1cca7cea31e37a79ff49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Andr=C3=A9=20Lund?= Date: Tue, 14 Jan 2025 11:11:30 +0100 Subject: [PATCH 04/28] =?UTF-8?q?Endrer=20navn=20p=C3=A5=20test=20til=20?= =?UTF-8?q?=C3=A5=20v=C3=A6re=20mere=20beskrivende.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Richard André Martinsen --- .../mediator/repository/OpplysningerRepositoryPostgresTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/repository/OpplysningerRepositoryPostgresTest.kt b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/repository/OpplysningerRepositoryPostgresTest.kt index b1c016bab..c4b0d99ab 100644 --- a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/repository/OpplysningerRepositoryPostgresTest.kt +++ b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/repository/OpplysningerRepositoryPostgresTest.kt @@ -496,7 +496,7 @@ class OpplysningerRepositoryPostgresTest { } @Test - fun `bugf ix`() { + fun `Sletter flere sett med opplysninger`() { withMigratedDb { val repo = OpplysningerRepositoryPostgres() val vaktmesterRepo = VaktmesterPostgresRepo() From 62b5f838e9c2ce8e8b48d0ab51ebacdfd1810904 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Andr=C3=A9=20Lund?= Date: Tue, 14 Jan 2025 12:33:30 +0100 Subject: [PATCH 05/28] Logger hvilke behandlingIder opplysninger slettes for. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Richard André Martinsen --- .../jobber/SlettFjernetOpplysninger.kt | 4 +- .../repository/VaktmesterPostgresRepo.kt | 75 ++++++++++++------- 2 files changed, 51 insertions(+), 28 deletions(-) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt index 3f08cdaa0..0945cf8fd 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt @@ -19,9 +19,7 @@ internal object SlettFjernetOpplysninger { action = { try { if (System.getenv("NAIS_CLUSTER_NAME") == "dev-gcp") { - vaktmesterRepository.slettOpplysninger(antall = 1).also { - logger.info { "Har slettet ${it.size} fjernede opplysninger" } - } + vaktmesterRepository.slettOpplysninger(antall = 10) } } catch (e: Exception) { logger.error { "Sletting av fjernet opplysninger feilet: $e" } diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt index a98a7027f..c20996d8e 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt @@ -6,6 +6,7 @@ import kotliquery.queryOf import kotliquery.sessionOf import kotliquery.using import mu.KotlinLogging +import mu.withLoggingContext import no.nav.dagpenger.behandling.db.PostgresDataSourceBuilder.dataSource import java.util.UUID @@ -22,19 +23,26 @@ internal class VaktmesterPostgresRepo { using(sessionOf(dataSource)) { session -> session.transaction { tx -> tx.medLås(låsenøkkel) { - hentAlleOpplysningerSomErFjernet(tx, antall).forEach { opplysninger -> - opplysninger.forEach { opplysningId -> - val liste = mutableListOf() - liste.add(slettOpplysningVerdi(opplysningId)) - liste.add(slettOpplysningUtledet(opplysningId)) - liste.add(slettOpplysningLink(opplysningId)) - liste.add(slettOpplysningUtledning(opplysningId)) - liste.add(slettErstatteAv(opplysningId)) - liste.add(slettOpplysning(opplysningId)) - liste.forEach { batch -> - batch.run(tx) + hentAlleOpplysningerSomErFjernet(tx, antall).forEach { kandidater -> + withLoggingContext( + "behandlingId" to kandidater.behandlingId.toString(), + "opplysningerId" to kandidater.opplysningerId.toString(), + ) { + logger.info { "Skal slette ${kandidater.opplysninger().size} opplysninger " } + kandidater.opplysninger().forEach { opplysningId -> + val statements = mutableListOf() + statements.add(slettOpplysningVerdi(opplysningId)) + statements.add(slettOpplysningUtledet(opplysningId)) + statements.add(slettOpplysningLink(opplysningId)) + statements.add(slettOpplysningUtledning(opplysningId)) + statements.add(slettErstatteAv(opplysningId)) + statements.add(slettOpplysning(opplysningId)) + statements.forEach { batch -> + batch.run(tx) + } + slettet.add(opplysningId) } - slettet.add(opplysningId) + logger.info { "Slettet ${kandidater.opplysninger().size} opplysninger " } } } } @@ -43,11 +51,23 @@ internal class VaktmesterPostgresRepo { return slettet } + internal data class Kandidater( + val behandlingId: UUID?, + val opplysningerId: UUID, + private val opplysninger: MutableList = mutableListOf(), + ) { + fun leggTil(uuid: UUID) { + opplysninger.add(uuid) + } + + fun opplysninger() = opplysninger.toList() + } + private fun hentAlleOpplysningerSomErFjernet( tx: TransactionalSession, antall: Int, - ): List> { - val opplysningerIder = hentOpplysningerIder(tx, antall) + ): List { + val kandidater = hentOpplysningerIder(tx, antall) //language=PostgreSQL val query = @@ -55,37 +75,39 @@ internal class VaktmesterPostgresRepo { SELECT id FROM opplysning INNER JOIN opplysninger_opplysning op ON opplysning.id = op.opplysning_id - WHERE fjernet = true AND op.opplysninger_id = :opplysninger_id + WHERE fjernet = TRUE AND op.opplysninger_id = :opplysninger_id ORDER BY op.opplysninger_id, opprettet DESC; """.trimIndent() val opplysninger = - opplysningerIder.map { id -> + kandidater.onEach { kandidat -> tx.run( queryOf( query, - mapOf("opplysninger_id" to id), + mapOf("opplysninger_id" to kandidat.opplysningerId), ).map { row -> - row.uuid("id") + kandidat.leggTil( + row.uuid("id"), + ) }.asList, ) } - - logger.info { "Fant ${opplysninger.size} opplysninger som er fjernet og som skal slettes" } + logger.info { "Fant ${kandidater.size} opplysningsett som inneholder opplysninger som er fjernet og som skal slettes" } return opplysninger } private fun hentOpplysningerIder( tx: TransactionalSession, antall: Int, - ): List { + ): List { //language=PostgreSQL val test = """ - SELECT DISTINCT (op.opplysninger_id) AS opplysinger_id + SELECT DISTINCT (op.opplysninger_id) AS opplysinger_id, b.behandling_id FROM opplysning - INNER JOIN opplysninger_opplysning op ON opplysning.id = op.opplysning_id - WHERE fjernet = true + INNER JOIN opplysninger_opplysning op ON opplysning.id = op.opplysning_id + LEFT OUTER JOIN behandling_opplysninger b ON b.opplysninger_id = op.opplysninger_id + WHERE fjernet = TRUE LIMIT :antall; """.trimIndent() @@ -95,7 +117,10 @@ internal class VaktmesterPostgresRepo { test, mapOf("antall" to antall), ).map { row -> - row.uuid("opplysinger_id") + Kandidater( + row.uuidOrNull("behandling_id"), + row.uuid("opplysinger_id"), + ) }.asList, ) From 60b4b71e9bb8a898dc9b91e05b5b5a34561e020c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Andr=C3=A9=20Lund?= Date: Tue, 14 Jan 2025 12:36:51 +0100 Subject: [PATCH 06/28] =?UTF-8?q?Logger=20hvilke=20behandlinger=20opplysni?= =?UTF-8?q?ngene=20som=20blir=20slettet=20tilh=C3=B8rer.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Richard André Martinsen --- .../mediator/repository/VaktmesterPostgresRepo.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt index c20996d8e..2e8ee3fb5 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt @@ -23,13 +23,13 @@ internal class VaktmesterPostgresRepo { using(sessionOf(dataSource)) { session -> session.transaction { tx -> tx.medLås(låsenøkkel) { - hentAlleOpplysningerSomErFjernet(tx, antall).forEach { kandidater -> + hentAlleOpplysningerSomErFjernet(tx, antall).forEach { kandidat -> withLoggingContext( - "behandlingId" to kandidater.behandlingId.toString(), - "opplysningerId" to kandidater.opplysningerId.toString(), + "behandlingId" to kandidat.behandlingId.toString(), + "opplysningerId" to kandidat.opplysningerId.toString(), ) { - logger.info { "Skal slette ${kandidater.opplysninger().size} opplysninger " } - kandidater.opplysninger().forEach { opplysningId -> + logger.info { "Skal slette ${kandidat.opplysninger().size} opplysninger " } + kandidat.opplysninger().forEach { opplysningId -> val statements = mutableListOf() statements.add(slettOpplysningVerdi(opplysningId)) statements.add(slettOpplysningUtledet(opplysningId)) @@ -42,7 +42,7 @@ internal class VaktmesterPostgresRepo { } slettet.add(opplysningId) } - logger.info { "Slettet ${kandidater.opplysninger().size} opplysninger " } + logger.info { "Slettet ${kandidat.opplysninger().size} opplysninger " } } } } From 4ae4ac9f78f6a343e6e3ef0c03ea5eff70863fdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Roaldseth?= Date: Tue, 14 Jan 2025 12:47:19 +0100 Subject: [PATCH 07/28] Legg hele avklaringen inn i hvert regelsett MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tonje Mjøvik Myran Co-authored-by: Eivind Havnelid Røyrvik --- .../mediator/api/BehandlingApiMapper.kt | 42 +++++++++++-------- .../mediator/api/BehandlingApiTest.kt | 18 ++++++++ .../src/main/resources/behandling-api.yaml | 2 +- 3 files changed, 44 insertions(+), 18 deletions(-) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt index 2bfd9e0c1..f77ea7824 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt @@ -56,7 +56,15 @@ private val logger = KotlinLogging.logger { } internal fun Behandling.tilBehandlingDTO(): BehandlingDTO = withLoggingContext("behandlingId" to this.behandlingId.toString()) { - val opplysningliste = this.opplysninger().finnAlle() + val opplysninger = this.opplysninger().finnAlle().toSet() + val avklaringer = avklaringer().toSet() + val spesifikkeAvklaringskoder = + behandler.regelverk.regelsett + .asSequence() + .flatMap { it.avklaringer() } + .toSet() + val generelleAvklaringer = avklaringer.filterNot { it.kode in spesifikkeAvklaringskoder } + BehandlingDTO( behandlingId = this.behandlingId, tilstand = @@ -71,30 +79,30 @@ internal fun Behandling.tilBehandlingDTO(): BehandlingDTO = Behandling.TilstandType.TilGodkjenning -> BehandlingDTO.Tilstand.TilGodkjenning Behandling.TilstandType.TilBeslutning -> BehandlingDTO.Tilstand.TilBeslutning }, - vilkår = behandler.regelverk.regelsettAvType(RegelsettType.Vilkår).map { it.tilRegelsettDTO(opplysningliste) }, - fastsettelser = behandler.regelverk.regelsettAvType(RegelsettType.Fastsettelse).map { it.tilRegelsettDTO(opplysningliste) }, + vilkår = + behandler.regelverk + .regelsettAvType(RegelsettType.Vilkår) + .map { it.tilRegelsettDTO(opplysninger, avklaringer) }, + fastsettelser = + behandler.regelverk + .regelsettAvType(RegelsettType.Fastsettelse) + .map { it.tilRegelsettDTO(opplysninger, avklaringer) }, kreverTotrinnskontroll = this.kreverTotrinnskontroll(), - avklaringer = - this - .avklaringer() - .map { avklaring -> - avklaring.tilAvklaringDTO() - }.also { - logger.info { "Mapper '${it.size}' (alle) avklaringer til AvklaringDTO " } - }, - opplysninger = - this.opplysninger().finnAlle().map { opplysning -> - opplysning.tilOpplysningDTO() - }, + avklaringer = generelleAvklaringer.map { it.tilAvklaringDTO() }, + opplysninger = opplysninger.map { it.tilOpplysningDTO() }, ) } -private fun Regelsett.tilRegelsettDTO(opplysninger: List>): RegelsettDTO { +private fun Regelsett.tilRegelsettDTO( + opplysninger: Set>, + avklaringer: Set, +): RegelsettDTO { val produserer = opplysninger.filter { opplysning -> opplysning.opplysningstype in produserer } + val egneAvklaringer = avklaringer() return RegelsettDTO( navn, - avklaringer = avklaringer().map { it.kode }, + avklaringer = avklaringer.filter { it.kode in egneAvklaringer }.map { it.tilAvklaringDTO() }, opplysninger = produserer.map { opplysning -> opplysning.id }, ) } diff --git a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiTest.kt b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiTest.kt index e68b8a2c4..7c1b4d42a 100644 --- a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiTest.kt +++ b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiTest.kt @@ -10,6 +10,7 @@ import com.github.navikt.tbd_libs.rapids_and_rivers.JsonMessage import com.github.navikt.tbd_libs.rapids_and_rivers.test_support.TestRapid import com.github.navikt.tbd_libs.rapids_and_rivers_api.MessageProblems import io.kotest.assertions.throwables.shouldNotThrowAny +import io.kotest.matchers.collections.shouldHaveSize import io.kotest.matchers.collections.shouldNotBeEmpty import io.kotest.matchers.shouldBe import io.kotest.matchers.string.shouldBeEmpty @@ -55,6 +56,7 @@ import no.nav.dagpenger.opplysning.Systemkilde import no.nav.dagpenger.opplysning.verdier.Barn import no.nav.dagpenger.opplysning.verdier.BarnListe import no.nav.dagpenger.opplysning.verdier.Beløp +import no.nav.dagpenger.regel.Avklaringspunkter import no.nav.dagpenger.regel.Minsteinntekt import no.nav.dagpenger.regel.SøknadInnsendtHendelse import no.nav.dagpenger.regel.Søknadstidspunkt @@ -108,6 +110,16 @@ internal class BehandlingApiTest { ), ), ), + Avklaring.rehydrer( + UUIDv7.ny(), + Avklaringspunkter.InntektNesteKalendermåned, + mutableListOf( + Avklaring.Endring.Avklart( + avklartAv = Systemkilde(UUIDv7.ny(), LocalDateTime.now()), + begrunnelse = "heia", + ), + ), + ), ) private val behandling = Behandling.rehydrer( @@ -256,6 +268,12 @@ internal class BehandlingApiTest { behandlingDto.opplysninger.all { it.redigerbar } shouldBe false behandlingDto.avklaringer.shouldNotBeEmpty() + with(behandlingDto.vilkår.single { it.navn == "§ 4-4. Krav til minsteinntekt" }) { + avklaringer shouldHaveSize 1 + avklaringer.single().kode shouldBe "InntektNesteKalendermåned" + } + + behandlingDto.avklaringer shouldHaveSize 4 val aktivAvklaring = behandling.aktiveAvklaringer().first() with(behandlingDto.avklaringer.first { it.status == AvklaringDTO.Status.Åpen }) { diff --git a/openapi/src/main/resources/behandling-api.yaml b/openapi/src/main/resources/behandling-api.yaml index 63230ce4d..ee0f0dac1 100644 --- a/openapi/src/main/resources/behandling-api.yaml +++ b/openapi/src/main/resources/behandling-api.yaml @@ -554,7 +554,7 @@ components: type: array description: Hvilke avklaringer som skal vises i dette regelsettet items: - $ref: '#/components/schemas/AvklaringKode' + $ref: '#/components/schemas/Avklaring' opplysninger: type: array items: From 52da5adea75ac9fb523ab89fa019f8e505acb859 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Roaldseth?= Date: Tue, 14 Jan 2025 12:59:37 +0100 Subject: [PATCH 08/28] Legg til sortering etter navn MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tonje Mjøvik Myran Co-authored-by: Eivind Havnelid Røyrvik Co-authored-by: Sindre Sægrov --- .../behandling/mediator/api/BehandlingApiMapper.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt index f77ea7824..ea51da26a 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt @@ -82,11 +82,13 @@ internal fun Behandling.tilBehandlingDTO(): BehandlingDTO = vilkår = behandler.regelverk .regelsettAvType(RegelsettType.Vilkår) - .map { it.tilRegelsettDTO(opplysninger, avklaringer) }, + .map { it.tilRegelsettDTO(opplysninger, avklaringer) } + .sortedBy { it.navn }, fastsettelser = behandler.regelverk .regelsettAvType(RegelsettType.Fastsettelse) - .map { it.tilRegelsettDTO(opplysninger, avklaringer) }, + .map { it.tilRegelsettDTO(opplysninger, avklaringer) } + .sortedBy { it.navn }, kreverTotrinnskontroll = this.kreverTotrinnskontroll(), avklaringer = generelleAvklaringer.map { it.tilAvklaringDTO() }, opplysninger = opplysninger.map { it.tilOpplysningDTO() }, From c75667fe22ef69b9eb8d82df7b35dd86765e139f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Andr=C3=A9=20Lund?= Date: Tue, 14 Jan 2025 12:53:22 +0100 Subject: [PATCH 09/28] Slett bare et opplysningssett per gang. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Richard André Martinsen --- .../mediator/repository/VaktmesterPostgresRepo.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt index 2e8ee3fb5..7c12d79b2 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt @@ -18,7 +18,7 @@ internal class VaktmesterPostgresRepo { private val logger = KotlinLogging.logger {} } - fun slettOpplysninger(antall: Int = 10): List { + fun slettOpplysninger(antall: Int = 1): List { val slettet = mutableListOf() using(sessionOf(dataSource)) { session -> session.transaction { tx -> @@ -92,7 +92,7 @@ internal class VaktmesterPostgresRepo { }.asList, ) } - logger.info { "Fant ${kandidater.size} opplysningsett som inneholder opplysninger som er fjernet og som skal slettes" } + logger.info { "Fant ${kandidater.size} opplysningsett som inneholder opplysninger som er fjernet og som skal slettes" } return opplysninger } @@ -123,8 +123,6 @@ internal class VaktmesterPostgresRepo { ) }.asList, ) - - logger.info { "Skal slette opplysninger tilhørende opplysinger_id: ${opplysningerIder.joinToString("\n") { it.toString() }}" } return opplysningerIder } From b6a243deefe831e3e38d8f15faa3d50f93d815d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Andr=C3=A9=20Lund?= Date: Tue, 14 Jan 2025 13:13:14 +0100 Subject: [PATCH 10/28] Fiks test. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Richard André Martinsen --- .../mediator/repository/OpplysningerRepositoryPostgresTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/repository/OpplysningerRepositoryPostgresTest.kt b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/repository/OpplysningerRepositoryPostgresTest.kt index c4b0d99ab..374c018f7 100644 --- a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/repository/OpplysningerRepositoryPostgresTest.kt +++ b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/repository/OpplysningerRepositoryPostgresTest.kt @@ -548,7 +548,7 @@ class OpplysningerRepositoryPostgresTest { opplysninger2.leggTil(endretQFaktum).also { regelkjøring2.evaluer() } repo.lagreOpplysninger(opplysninger2) - vaktmesterRepo.slettOpplysninger().size shouldBe 6 + vaktmesterRepo.slettOpplysninger(antall = 10).size shouldBe 6 } } } From 1f86ecc2cae98267ef934969991de7d60e84998c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Andr=C3=A9=20Lund?= Date: Tue, 14 Jan 2025 13:15:00 +0100 Subject: [PATCH 11/28] Skrur av slettejobb. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Richard André Martinsen --- .../behandling/mediator/jobber/SlettFjernetOpplysninger.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt index 0945cf8fd..03685c793 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt @@ -18,8 +18,10 @@ internal object SlettFjernetOpplysninger { period = 15.minutes.inWholeMilliseconds, action = { try { - if (System.getenv("NAIS_CLUSTER_NAME") == "dev-gcp") { + if (System.getenv("NAIS_CLUSTER_NAME") == "skrudd-av") { vaktmesterRepository.slettOpplysninger(antall = 10) + } else { + logger.info { "Sletting av fjernet opplysninger er skrudd av" } } } catch (e: Exception) { logger.error { "Sletting av fjernet opplysninger feilet: $e" } From 857f62eae612b20c7621a8d37b0d3564d990246c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Roaldseth?= Date: Tue, 14 Jan 2025 13:28:44 +0100 Subject: [PATCH 12/28] =?UTF-8?q?Legg=20til=20utledning=20av=20utfall=20p?= =?UTF-8?q?=C3=A5=20regelsett=20som=20er=20vilk=C3=A5r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tonje Mjøvik Myran Co-authored-by: Eivind Havnelid Røyrvik --- .../regel/TapAvArbeidsinntektOgArbeidstid.kt | 2 +- .../mediator/api/BehandlingApiMapper.kt | 25 ++++++++++++++++--- .../src/main/resources/behandling-api.yaml | 2 +- .../no/nav/dagpenger/opplysning/Regelsett.kt | 12 ++++++++- 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/TapAvArbeidsinntektOgArbeidstid.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/TapAvArbeidsinntektOgArbeidstid.kt index 8aab5f4a4..b64bcf143 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/TapAvArbeidsinntektOgArbeidstid.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/TapAvArbeidsinntektOgArbeidstid.kt @@ -93,7 +93,7 @@ object TapAvArbeidsinntektOgArbeidstid { regel(beregningsregel) { enAv(beregningsregel6mnd, beregningsregel12mnd, beregningsregel36mnd) } - regel(kravTilTapAvArbeidsinntektOgArbeidstid) { + utfall(kravTilTapAvArbeidsinntektOgArbeidstid) { alle(kravTilTapAvArbeidsinntekt, kravTilTaptArbeidstid, beregningsregel, kravTilMinstTaptArbeidstid) } } diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt index ea51da26a..cc1bd3ddf 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt @@ -100,15 +100,34 @@ private fun Regelsett.tilRegelsettDTO( avklaringer: Set, ): RegelsettDTO { val produserer = opplysninger.filter { opplysning -> opplysning.opplysningstype in produserer } - val egneAvklaringer = avklaringer() + val avklaringskoder = avklaringer() + val egneAvklaringer = avklaringer.filter { it.kode in avklaringskoder } + + val opplysningMedUtfall = opplysninger.singleOrNull { it.opplysningstype == utfall } + var status = tilStatus(opplysningMedUtfall?.verdi as Boolean?) + + if (egneAvklaringer.any { it.måAvklares() }) { + status = RegelsettDTO.Status.HarAvklaring + } return RegelsettDTO( navn, - avklaringer = avklaringer.filter { it.kode in egneAvklaringer }.map { it.tilAvklaringDTO() }, - opplysninger = produserer.map { opplysning -> opplysning.id }, + avklaringer = egneAvklaringer.map { it.tilAvklaringDTO() }, + opplysningIder = produserer.map { opplysning -> opplysning.id }, + status = status, ) } +private fun tilStatus(utfall: Boolean?): RegelsettDTO.Status { + if (utfall == null) return RegelsettDTO.Status.Info + + return if (utfall) { + RegelsettDTO.Status.Oppfylt + } else { + RegelsettDTO.Status.IkkeOppfylt + } +} + internal fun Behandling.tilBehandlingOpplysningerDTO(): BehandlingOpplysningerDTO = withLoggingContext("behandlingId" to this.behandlingId.toString()) { BehandlingOpplysningerDTO( diff --git a/openapi/src/main/resources/behandling-api.yaml b/openapi/src/main/resources/behandling-api.yaml index ee0f0dac1..e737ad141 100644 --- a/openapi/src/main/resources/behandling-api.yaml +++ b/openapi/src/main/resources/behandling-api.yaml @@ -555,7 +555,7 @@ components: description: Hvilke avklaringer som skal vises i dette regelsettet items: $ref: '#/components/schemas/Avklaring' - opplysninger: + opplysningIder: type: array items: $ref: '#/components/schemas/OpplysningsId' diff --git a/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt b/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt index 13d1f7d41..fb409d213 100644 --- a/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt +++ b/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt @@ -18,6 +18,8 @@ class Regelsett( private val regler: MutableMap, TemporalCollection>> = mutableMapOf() private val avklaringer: MutableSet = mutableSetOf() + private var _utfall: Opplysningstype? = null + val utfall = _utfall init { block() @@ -27,7 +29,15 @@ class Regelsett( fun avklaring(avklaringkode: Avklaringkode) = avklaringer.add(avklaringkode) - fun avklaringer() = avklaringer.toList() + fun avklaringer() = avklaringer.toSet() + + fun utfall( + produserer: Opplysningstype, + gjelderFraOgMed: LocalDate = LocalDate.MIN, + block: Opplysningstype.() -> Regel<*>, + ) = regel(produserer, gjelderFraOgMed, block).also { + _utfall = produserer + } fun > regel( produserer: Opplysningstype, From b494ba4627d1e8ad20742c21e030d2160758b1ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Roaldseth?= Date: Tue, 14 Jan 2025 13:37:12 +0100 Subject: [PATCH 13/28] =?UTF-8?q?Legg=20til=20utfall=20p=C3=A5=20alle=20re?= =?UTF-8?q?gelsettene=20vi=20klarer=20=C3=A5=20lage=20utfall=20p=C3=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tonje Mjøvik Myran Co-authored-by: Eivind Havnelid Røyrvik --- dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Alderskrav.kt | 3 ++- .../src/main/kotlin/no/nav/dagpenger/regel/FulleYtelser.kt | 2 +- .../kotlin/no/nav/dagpenger/regel/KravP\303\245Dagpenger.kt" | 3 +-- dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Medlemskap.kt | 2 +- dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Meldeplikt.kt | 2 +- .../src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt | 2 +- dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt | 2 +- .../src/main/kotlin/no/nav/dagpenger/regel/Opptjeningstid.kt | 3 ++- .../kotlin/no/nav/dagpenger/regel/ReellArbeidss\303\270ker.kt" | 2 +- .../src/main/kotlin/no/nav/dagpenger/regel/Rettighetstype.kt | 3 ++- .../no/nav/dagpenger/regel/SamordingUtenforFolketrygden.kt | 2 +- dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Samordning.kt | 2 +- .../src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt | 2 +- dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utdanning.kt | 3 ++- .../src/main/kotlin/no/nav/dagpenger/regel/Utestengning.kt | 2 +- dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Verneplikt.kt | 2 +- 16 files changed, 20 insertions(+), 17 deletions(-) diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Alderskrav.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Alderskrav.kt index 943651d8a..a2f0d9e08 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Alderskrav.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Alderskrav.kt @@ -29,7 +29,8 @@ object Alderskrav { regel(aldersgrense) { oppslag(virkningsdato) { 67 } } regel(sisteMåned) { leggTilÅr(fødselsdato, aldersgrense) } regel(sisteDagIMåned) { sisteDagIMåned(sisteMåned) } - regel(kravTilAlder) { førEllerLik(virkningsdato, sisteDagIMåned) } + + utfall(kravTilAlder) { førEllerLik(virkningsdato, sisteDagIMåned) } } val MuligGjenopptakKontroll = diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/FulleYtelser.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/FulleYtelser.kt index 4d604845f..b713954eb 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/FulleYtelser.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/FulleYtelser.kt @@ -13,7 +13,7 @@ object FulleYtelser { val regelsett = Regelsett("§ 4-24. Medlem som har fulle ytelser etter folketrygdloven eller avtalefestet pensjon") { - regel(ikkeFulleYtelser) { oppslag(prøvingsdato) { true } } + utfall(ikkeFulleYtelser) { oppslag(prøvingsdato) { true } } } val ønsketResultat = listOf(ikkeFulleYtelser) diff --git "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/KravP\303\245Dagpenger.kt" "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/KravP\303\245Dagpenger.kt" index d20165cf2..3aa6ee8b6 100644 --- "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/KravP\303\245Dagpenger.kt" +++ "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/KravP\303\245Dagpenger.kt" @@ -14,10 +14,9 @@ object KravPåDagpenger { val regelsett = Regelsett("Krav på dagpenger") { - regel(minsteinntektEllerVerneplikt) { enAv(minsteinntekt, oppfyllerKravetTilVerneplikt) } - regel(kravPåDagpenger) { + utfall(kravPåDagpenger) { alle( Alderskrav.kravTilAlder, FulleYtelser.ikkeFulleYtelser, diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Medlemskap.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Medlemskap.kt index bd2fb5906..417dd05b2 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Medlemskap.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Medlemskap.kt @@ -13,6 +13,6 @@ object Medlemskap { val regelsett = Regelsett("§ 4-2. Opphold i Norge") { regel(medlemFolketrygden) { oppslag(prøvingsdato) { true } } - regel(oppfyllerMedlemskap) { erSann(medlemFolketrygden) } + utfall(oppfyllerMedlemskap) { erSann(medlemFolketrygden) } } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Meldeplikt.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Meldeplikt.kt index 3a367197a..fa17120bd 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Meldeplikt.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Meldeplikt.kt @@ -16,7 +16,7 @@ object Meldeplikt { val regelsett = Regelsett("§ 4-8. Meldeplikt og møteplikt") { regel(registrertArbeidssøker) { innhentMed(prøvingsdato) } - regel(registrertPåSøknadstidspunktet) { erSann(registrertArbeidssøker) } + utfall(registrertPåSøknadstidspunktet) { erSann(registrertArbeidssøker) } } val IkkeRegistrertSomArbeidsøkerKontroll = diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt index 29dd59a6c..bb35f7093 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt @@ -96,7 +96,7 @@ object Minsteinntekt { regel(`36mndTerskel`) { multiplikasjon(grunnbeløp, `36mndTerskelFaktor`) } regel(over36mndTerskel) { størreEnnEllerLik(inntekt36, `36mndTerskel`) } - regel(minsteinntekt) { enAv(over12mndTerskel, over36mndTerskel) } + utfall(minsteinntekt) { enAv(over12mndTerskel, over36mndTerskel) } avklaring(Avklaringspunkter.SvangerskapsrelaterteSykepenger) avklaring(Avklaringspunkter.InntektNesteKalendermåned) diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt index 5b42e3daf..eec8e2164 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt @@ -17,6 +17,6 @@ object Opphold { regel(oppholdINorge) { oppslag(prøvingsdato) { true } } regel(unntakForOpphold) { oppslag(prøvingsdato) { false } } - regel(oppfyllerKravet) { enAv(oppholdINorge, unntakForOpphold) } + utfall(oppfyllerKravet) { enAv(oppholdINorge, unntakForOpphold) } } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opptjeningstid.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opptjeningstid.kt index b605c1bdb..7ca1fa4d1 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opptjeningstid.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opptjeningstid.kt @@ -2,6 +2,7 @@ package no.nav.dagpenger.regel import no.nav.dagpenger.opplysning.Opplysningstype import no.nav.dagpenger.opplysning.Regelsett +import no.nav.dagpenger.opplysning.RegelsettType import no.nav.dagpenger.opplysning.id import no.nav.dagpenger.opplysning.regel.dato.førsteArbeidsdag import no.nav.dagpenger.opplysning.regel.dato.sisteAvsluttendeKalenderMåned @@ -23,7 +24,7 @@ object Opptjeningstid { val sisteAvsluttendendeKalenderMåned = Opplysningstype.somDato("Siste avsluttende kalendermåned".id(SisteAvsluttendeKalenderMåned)) val regelsett = - Regelsett("Opptjeningsperiode") { + Regelsett("Opptjeningsperiode", RegelsettType.Fastsettelse) { regel(pliktigRapporteringsfrist) { oppslag(prøvingsdato) { Aordningen.rapporteringsfrist(it) } } regel(justertRapporteringsfrist) { førsteArbeidsdag(pliktigRapporteringsfrist) } regel(sisteAvsluttendendeKalenderMåned) { sisteAvsluttendeKalenderMåned(prøvingsdato, justertRapporteringsfrist) } diff --git "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/ReellArbeidss\303\270ker.kt" "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/ReellArbeidss\303\270ker.kt" index d0e9fa762..8158fefa2 100644 --- "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/ReellArbeidss\303\270ker.kt" +++ "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/ReellArbeidss\303\270ker.kt" @@ -51,7 +51,7 @@ object ReellArbeidssøker { regel(oppfyllerKravTilArbeidsfør) { enAv(erArbeidsfør) } regel(oppfyllerKravetTilEthvertArbeid) { enAv(villigTilEthvertArbeid) } - regel(kravTilArbeidssøker) { + utfall(kravTilArbeidssøker) { alle( oppfyllerKravTilArbeidssøker, oppfyllerKravTilMobilitet, diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Rettighetstype.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Rettighetstype.kt index feb0e5ff9..04e7e4363 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Rettighetstype.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Rettighetstype.kt @@ -2,6 +2,7 @@ package no.nav.dagpenger.regel import no.nav.dagpenger.opplysning.Opplysningstype import no.nav.dagpenger.opplysning.Regelsett +import no.nav.dagpenger.opplysning.RegelsettType import no.nav.dagpenger.opplysning.id import no.nav.dagpenger.opplysning.regel.enAv import no.nav.dagpenger.opplysning.regel.ingenAv @@ -26,7 +27,7 @@ object Rettighetstype { val rettighetstype = Opplysningstype.somBoolsk("Rettighetstype".id("Rettighetstype")) val regelsett = - Regelsett("Rettighetstype") { + Regelsett("Rettighetstype", RegelsettType.Fastsettelse) { regel(ordinærArbeid) { innhentes } regel(permittering) { innhentes } regel(lønnsgaranti) { innhentes } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/SamordingUtenforFolketrygden.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/SamordingUtenforFolketrygden.kt index 28e0ea01d..e621e738d 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/SamordingUtenforFolketrygden.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/SamordingUtenforFolketrygden.kt @@ -104,7 +104,7 @@ object SamordingUtenforFolketrygden { regel(dagsatsSamordnetUtenforFolketrygden) { divisjon(samordnetUkessats, arbeidsdagerPerUke) } - regel(skalSamordnesUtenforFolketrygden) { + utfall(skalSamordnesUtenforFolketrygden) { enAv( andreYtelser, pensjonFraOffentligTjenestepensjonsordning, diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Samordning.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Samordning.kt index 1e481730c..e81ec8d19 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Samordning.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Samordning.kt @@ -99,7 +99,7 @@ object Samordning { regel(utfallEtterSamordning) { enAv(kanUtbetale, harBarnetillegg) } - regel(skalSamordnes) { + utfall(skalSamordnes) { enAv( sykepenger, pleiepenger, diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt index 0d36869fd..3815deacc 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt @@ -19,6 +19,6 @@ object StreikOgLockout { Regelsett("§ 4-22. Bortfall ved streik og lock-out").apply { regel(deltarIStreikOgLockout) { oppslag(prøvingsdato) { false } } regel(sammeBedriftOgPåvirket) { oppslag(prøvingsdato) { false } } - regel(ikkeStreikEllerLockout) { ingenAv(deltarIStreikOgLockout, sammeBedriftOgPåvirket) } + utfall(ikkeStreikEllerLockout) { ingenAv(deltarIStreikOgLockout, sammeBedriftOgPåvirket) } } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utdanning.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utdanning.kt index f982af0bc..320ea5200 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utdanning.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utdanning.kt @@ -67,6 +67,7 @@ object Utdanning { regel(svartJaPåUtdanning) { erSann(tarUtdanning) } regel(svartNeiPåUtdanning) { erUsann(tarUtdanning) } regel(oppfyllerKravetPåUnntak) { alle(svartJaPåUtdanning, godkjentUnntakForUtdanning) } - regel(kravTilUtdanning) { enAv(oppfyllerKravetPåUnntak, svartNeiPåUtdanning) } + + utfall(kravTilUtdanning) { enAv(oppfyllerKravetPåUnntak, svartNeiPåUtdanning) } } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utestengning.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utestengning.kt index be842cb41..6ad3646c2 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utestengning.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utestengning.kt @@ -13,6 +13,6 @@ object Utestengning { val regelsett = Regelsett("§ 4-28. Utestengning") { regel(utestengt) { oppslag(prøvingsdato) { false } } - regel(oppfyllerKravetTilIkkeUtestengt) { ikke(utestengt) } + utfall(oppfyllerKravetTilIkkeUtestengt) { ikke(utestengt) } } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Verneplikt.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Verneplikt.kt index 8ca440e81..13a11a173 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Verneplikt.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Verneplikt.kt @@ -16,7 +16,7 @@ object Verneplikt { val regelsett = Regelsett("§ 4-19. Dagpenger etter avtjent verneplikt") { regel(avtjentVerneplikt) { innhentMed(søknadIdOpplysningstype) } - regel(oppfyllerKravetTilVerneplikt) { erSann(avtjentVerneplikt) } + utfall(oppfyllerKravetTilVerneplikt) { erSann(avtjentVerneplikt) } } val VernepliktKontroll = From 48655166f8d655289d6c7ce45ac8becdbf7b9d52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Roaldseth?= Date: Tue, 14 Jan 2025 13:50:54 +0100 Subject: [PATCH 14/28] =?UTF-8?q?Sl=C3=A5=20sammen=20opphold=20og=20medlem?= =?UTF-8?q?skap=20til=20ett=20regelsett?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tonje Mjøvik Myran Co-authored-by: Eivind Havnelid Røyrvik --- .../regel/KravP\303\245Dagpenger.kt" | 1 - .../no/nav/dagpenger/regel/Medlemskap.kt | 17 +- .../kotlin/no/nav/dagpenger/regel/Opphold.kt | 15 +- .../regel/S\303\270knadInnsendtRegelsett.kt" | 1 - .../dagpenger/regel/S\303\270knadsprosess.kt" | 1 - .../nav/dagpenger/features/MedlemskapSteg.kt | 8 +- .../utils/RegeltreDokumentasjonPlugin.kt | 2 - .../resources/features/02-Medlemskap.feature | 14 - .../features/02-Opphold i Norge.feature | 10 + docs/regeltre-dagpenger.approved.md | 429 +++++++++--------- ...\302\247 4-2. Opphold i Norge.approved.md" | 14 + .../dagpenger/behandling/mediator/Vedtak.kt | 3 +- ... skal innvilges.etterInntekt.approved.txt" | 5 +- ...0vingsdato.innvilgelse-igjen.approved.txt" | 5 +- ...303\270vingsdato.innvilgelse.approved.txt" | 5 +- 15 files changed, 267 insertions(+), 263 deletions(-) delete mode 100644 dagpenger/src/test/resources/features/02-Medlemskap.feature diff --git "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/KravP\303\245Dagpenger.kt" "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/KravP\303\245Dagpenger.kt" index 3aa6ee8b6..01077e7bc 100644 --- "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/KravP\303\245Dagpenger.kt" +++ "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/KravP\303\245Dagpenger.kt" @@ -20,7 +20,6 @@ object KravPåDagpenger { alle( Alderskrav.kravTilAlder, FulleYtelser.ikkeFulleYtelser, - Medlemskap.oppfyllerMedlemskap, Meldeplikt.registrertPåSøknadstidspunktet, minsteinntektEllerVerneplikt, Opphold.oppfyllerKravet, diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Medlemskap.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Medlemskap.kt index 417dd05b2..1c2f248a0 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Medlemskap.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Medlemskap.kt @@ -1,18 +1,3 @@ package no.nav.dagpenger.regel -import no.nav.dagpenger.opplysning.Opplysningstype -import no.nav.dagpenger.opplysning.Regelsett -import no.nav.dagpenger.opplysning.regel.erSann -import no.nav.dagpenger.opplysning.regel.oppslag -import no.nav.dagpenger.regel.Søknadstidspunkt.prøvingsdato - -object Medlemskap { - val medlemFolketrygden = Opplysningstype.somBoolsk("Er personen medlem av folketrygden") - val oppfyllerMedlemskap = Opplysningstype.somBoolsk("Oppfyller kravet til medlemskap") - - val regelsett = - Regelsett("§ 4-2. Opphold i Norge") { - regel(medlemFolketrygden) { oppslag(prøvingsdato) { true } } - utfall(oppfyllerMedlemskap) { erSann(medlemFolketrygden) } - } -} +object Medlemskap diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt index eec8e2164..c8320f78d 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt @@ -3,20 +3,31 @@ package no.nav.dagpenger.regel import no.nav.dagpenger.opplysning.Opplysningstype import no.nav.dagpenger.opplysning.Regelsett import no.nav.dagpenger.opplysning.id +import no.nav.dagpenger.opplysning.regel.alle import no.nav.dagpenger.opplysning.regel.enAv +import no.nav.dagpenger.opplysning.regel.erSann import no.nav.dagpenger.opplysning.regel.oppslag import no.nav.dagpenger.regel.Søknadstidspunkt.prøvingsdato object Opphold { var oppholdINorge = Opplysningstype.somBoolsk("Opphold i Norge".id("OppholdINorge")) var unntakForOpphold = Opplysningstype.somBoolsk("Oppfyller unntak for opphold i Norge") - val oppfyllerKravet = Opplysningstype.somBoolsk("Oppfyller kravet til opphold i Norge") + val oppfyllerKravetTilOpphold = Opplysningstype.somBoolsk("Oppfyller kravet til opphold i Norge") + + val medlemFolketrygden = Opplysningstype.somBoolsk("Er personen medlem av folketrygden") + val oppfyllerMedlemskap = Opplysningstype.somBoolsk("Oppfyller kravet til medlemskap") + + val oppfyllerKravet = Opplysningstype.somBoolsk("Oppfyller kravet til opphold og medlemskap i Norge") val regelsett = Regelsett("§ 4-2. Opphold i Norge") { regel(oppholdINorge) { oppslag(prøvingsdato) { true } } regel(unntakForOpphold) { oppslag(prøvingsdato) { false } } + regel(oppfyllerKravetTilOpphold) { enAv(oppholdINorge, unntakForOpphold) } + + regel(medlemFolketrygden) { oppslag(prøvingsdato) { true } } + regel(oppfyllerMedlemskap) { erSann(medlemFolketrygden) } - utfall(oppfyllerKravet) { enAv(oppholdINorge, unntakForOpphold) } + utfall(oppfyllerKravet) { alle(oppfyllerKravetTilOpphold, oppfyllerMedlemskap) } } } diff --git "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/S\303\270knadInnsendtRegelsett.kt" "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/S\303\270knadInnsendtRegelsett.kt" index cef73a95a..333cc47f8 100644 --- "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/S\303\270knadInnsendtRegelsett.kt" +++ "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/S\303\270knadInnsendtRegelsett.kt" @@ -16,7 +16,6 @@ val RegelverkDagpenger = Egenandel.regelsett, FulleYtelser.regelsett, KravPåDagpenger.regelsett, - Medlemskap.regelsett, Meldeplikt.regelsett, Minsteinntekt.regelsett, Opphold.regelsett, diff --git "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/S\303\270knadsprosess.kt" "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/S\303\270knadsprosess.kt" index ccf974ea0..5e8f47de3 100644 --- "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/S\303\270knadsprosess.kt" +++ "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/S\303\270knadsprosess.kt" @@ -53,7 +53,6 @@ class Søknadsprosess : Forretningsprosess { listOf( Alderskrav.kravTilAlder, FulleYtelser.ikkeFulleYtelser, - Medlemskap.oppfyllerMedlemskap, Meldeplikt.registrertPåSøknadstidspunktet, minsteinntektEllerVerneplikt, Opphold.oppfyllerKravet, diff --git a/dagpenger/src/test/kotlin/no/nav/dagpenger/features/MedlemskapSteg.kt b/dagpenger/src/test/kotlin/no/nav/dagpenger/features/MedlemskapSteg.kt index 6c3fb0272..2ce841238 100644 --- a/dagpenger/src/test/kotlin/no/nav/dagpenger/features/MedlemskapSteg.kt +++ b/dagpenger/src/test/kotlin/no/nav/dagpenger/features/MedlemskapSteg.kt @@ -9,13 +9,13 @@ import no.nav.dagpenger.opplysning.Faktum import no.nav.dagpenger.opplysning.Opplysning import no.nav.dagpenger.opplysning.Opplysninger import no.nav.dagpenger.opplysning.Regelkjøring -import no.nav.dagpenger.regel.Medlemskap +import no.nav.dagpenger.regel.Opphold import no.nav.dagpenger.regel.Søknadstidspunkt import no.nav.dagpenger.regel.Søknadstidspunkt.prøvingsdato class MedlemskapSteg : No { private val fraDato = 23.mai(2024) - private val regelsett = listOf(Medlemskap.regelsett, Søknadstidspunkt.regelsett) + private val regelsett = listOf(Opphold.regelsett, Søknadstidspunkt.regelsett) private val opplysninger = Opplysninger() private lateinit var regelkjøring: Regelkjøring @@ -30,11 +30,11 @@ class MedlemskapSteg : No { } Og("at personen er medlem {boolsk} i folketrygden") { medlem: Boolean -> - opplysninger.leggTil(Faktum(Medlemskap.medlemFolketrygden, medlem) as Opplysning<*>).also { regelkjøring.evaluer() } + opplysninger.leggTil(Faktum(Opphold.medlemFolketrygden, medlem) as Opplysning<*>).also { regelkjøring.evaluer() } } Så("skal vilkåret om medlemskap være {boolsk}") { utfall: Boolean -> - val faktum = opplysninger.finnOpplysning(Medlemskap.oppfyllerMedlemskap) + val faktum = opplysninger.finnOpplysning(Opphold.oppfyllerMedlemskap) withClue("Vilkåret om medlemskap skal være $utfall") { faktum.verdi shouldBe utfall } diff --git a/dagpenger/src/test/kotlin/no/nav/dagpenger/features/utils/RegeltreDokumentasjonPlugin.kt b/dagpenger/src/test/kotlin/no/nav/dagpenger/features/utils/RegeltreDokumentasjonPlugin.kt index 249f349a6..0a3b5b33e 100644 --- a/dagpenger/src/test/kotlin/no/nav/dagpenger/features/utils/RegeltreDokumentasjonPlugin.kt +++ b/dagpenger/src/test/kotlin/no/nav/dagpenger/features/utils/RegeltreDokumentasjonPlugin.kt @@ -13,7 +13,6 @@ import no.nav.dagpenger.dag.printer.MermaidPrinter import no.nav.dagpenger.opplysning.dag.RegeltreBygger import no.nav.dagpenger.regel.Alderskrav import no.nav.dagpenger.regel.FulleYtelser -import no.nav.dagpenger.regel.Medlemskap import no.nav.dagpenger.regel.Meldeplikt import no.nav.dagpenger.regel.Minsteinntekt import no.nav.dagpenger.regel.Opphold @@ -54,7 +53,6 @@ fun dokumentasjon(scenario: Scenario) { "@regel-utestengning" to Utestengning.regelsett, "@regel-fulle-ytelser-eller-afp" to FulleYtelser.regelsett, "@regel-streik-og-lockout" to StreikOgLockout.regelsett, - "@regel-medlemskap" to Medlemskap.regelsett, "@regel-dapengeperiode" to Dagpengeperiode.regelsett, "@regel-dagpengegrunnlag" to Dagpengegrunnlag.regelsett, "@regel-dagpengensStørrelse" to DagpengenesStørrelse.regelsett, diff --git a/dagpenger/src/test/resources/features/02-Medlemskap.feature b/dagpenger/src/test/resources/features/02-Medlemskap.feature deleted file mode 100644 index 68d3775af..000000000 --- a/dagpenger/src/test/resources/features/02-Medlemskap.feature +++ /dev/null @@ -1,14 +0,0 @@ -#language: no -@dokumentasjon @regel-medlemskap -Egenskap: § 4-2. Medlemskap - - - Scenariomal: Søker oppfyller § 4-2. Medlemskap - Gitt at søker har søkt om dagpenger og er medlem? - Og at personen er medlem "" i folketrygden - Så skal vilkåret om medlemskap være "" - - Eksempler: - | svar | utfall | - | ja | ja | - | nei | nei | \ No newline at end of file diff --git a/dagpenger/src/test/resources/features/02-Opphold i Norge.feature b/dagpenger/src/test/resources/features/02-Opphold i Norge.feature index c4e9819a9..1be9d8cae 100644 --- a/dagpenger/src/test/resources/features/02-Opphold i Norge.feature +++ b/dagpenger/src/test/resources/features/02-Opphold i Norge.feature @@ -17,3 +17,13 @@ Egenskap: § 4-2. Opphold i Norge Gitt at personen oppholder seg ikke i Norge Men at personen oppfyller ett unntak for opphold Så skal vilkåret om opphold i Norge være oppfylt + + Scenariomal: Søker oppfyller § 4-2. Medlemskap + Gitt at søker har søkt om dagpenger og er medlem? + Og at personen er medlem "" i folketrygden + Så skal vilkåret om medlemskap være "" + + Eksempler: + | svar | utfall | + | ja | ja | + | nei | nei | \ No newline at end of file diff --git a/docs/regeltre-dagpenger.approved.md b/docs/regeltre-dagpenger.approved.md index 9bbe7be28..7d81c5ef3 100644 --- a/docs/regeltre-dagpenger.approved.md +++ b/docs/regeltre-dagpenger.approved.md @@ -129,223 +129,224 @@ graph RL CG["Oppfyller kravet til minsteinntekt eller verneplikt"] -->|"EnAv"| CH["Har utført minst tre måneders militærtjeneste eller obligatorisk sivilforsvarstjeneste"] CI["Krav på dagpenger"] -->|"Alle"| F["Oppfyller kravet til alder"] CI["Krav på dagpenger"] -->|"Alle"| CF["Mottar ikke andre fulle ytelser"] - CI["Krav på dagpenger"] -->|"Alle"| CJ["Oppfyller kravet til medlemskap"] - CI["Krav på dagpenger"] -->|"Alle"| CK["Registrert som arbeidssøker på søknadstidspunktet"] + CI["Krav på dagpenger"] -->|"Alle"| CJ["Registrert som arbeidssøker på søknadstidspunktet"] CI["Krav på dagpenger"] -->|"Alle"| CG["Oppfyller kravet til minsteinntekt eller verneplikt"] - CI["Krav på dagpenger"] -->|"Alle"| CL["Oppfyller kravet til opphold i Norge"] - CI["Krav på dagpenger"] -->|"Alle"| CM["Krav til arbeidssøker"] - CI["Krav på dagpenger"] -->|"Alle"| CN["Rettighetstype"] - CI["Krav på dagpenger"] -->|"Alle"| CO["Utfall etter samordning"] - CI["Krav på dagpenger"] -->|"Alle"| CP["Er medlemmet ikke påvirket av streik eller lock-out?"] - CI["Krav på dagpenger"] -->|"Alle"| CQ["Krav til tap av arbeidsinntekt og arbeidstid"] - CI["Krav på dagpenger"] -->|"Alle"| CR["Krav til utdanning eller opplæring"] - CI["Krav på dagpenger"] -->|"Alle"| CS["Oppfyller krav til ikke utestengt"] - CT["Er personen medlem av folketrygden"] -->|"Oppslag"| B["Prøvingsdato"] - CJ["Oppfyller kravet til medlemskap"] -->|"ErSann"| CT["Er personen medlem av folketrygden"] - CU["Registrert som arbeidssøker"] -->|"Ekstern"| B["Prøvingsdato"] - CK["Registrert som arbeidssøker på søknadstidspunktet"] -->|"ErSann"| CU["Registrert som arbeidssøker"] - CV["Maks lengde på opptjeningsperiode"] -->|"Oppslag"| B["Prøvingsdato"] - CW["Første måned av opptjeningsperiode"] -->|"TrekkFraMåned"| CX["Siste avsluttende kalendermåned"] - CW["Første måned av opptjeningsperiode"] -->|"TrekkFraMåned"| CV["Maks lengde på opptjeningsperiode"] + CI["Krav på dagpenger"] -->|"Alle"| CK["Oppfyller kravet til opphold og medlemskap i Norge"] + CI["Krav på dagpenger"] -->|"Alle"| CL["Krav til arbeidssøker"] + CI["Krav på dagpenger"] -->|"Alle"| CM["Rettighetstype"] + CI["Krav på dagpenger"] -->|"Alle"| CN["Utfall etter samordning"] + CI["Krav på dagpenger"] -->|"Alle"| CO["Er medlemmet ikke påvirket av streik eller lock-out?"] + CI["Krav på dagpenger"] -->|"Alle"| CP["Krav til tap av arbeidsinntekt og arbeidstid"] + CI["Krav på dagpenger"] -->|"Alle"| CQ["Krav til utdanning eller opplæring"] + CI["Krav på dagpenger"] -->|"Alle"| CR["Oppfyller krav til ikke utestengt"] + CS["Registrert som arbeidssøker"] -->|"Ekstern"| B["Prøvingsdato"] + CJ["Registrert som arbeidssøker på søknadstidspunktet"] -->|"ErSann"| CS["Registrert som arbeidssøker"] + CT["Maks lengde på opptjeningsperiode"] -->|"Oppslag"| B["Prøvingsdato"] + CU["Første måned av opptjeningsperiode"] -->|"TrekkFraMåned"| CV["Siste avsluttende kalendermåned"] + CU["Første måned av opptjeningsperiode"] -->|"TrekkFraMåned"| CT["Maks lengde på opptjeningsperiode"] L["Inntektsopplysninger"] -->|"Ekstern"| B["Prøvingsdato"] - L["Inntektsopplysninger"] -->|"Ekstern"| CX["Siste avsluttende kalendermåned"] - L["Inntektsopplysninger"] -->|"Ekstern"| CW["Første måned av opptjeningsperiode"] - CY["Brutto arbeidsinntekt"] -->|"FiltrerRelevanteInntekter"| L["Inntektsopplysninger"] + L["Inntektsopplysninger"] -->|"Ekstern"| CV["Siste avsluttende kalendermåned"] + L["Inntektsopplysninger"] -->|"Ekstern"| CU["Første måned av opptjeningsperiode"] + CW["Brutto arbeidsinntekt"] -->|"FiltrerRelevanteInntekter"| L["Inntektsopplysninger"] BO["Grunnbeløp"] -->|"Oppslag"| B["Prøvingsdato"] - BT["Arbeidsinntekt siste 12 mnd"] -->|"SummerPeriode"| CY["Brutto arbeidsinntekt"] - CZ["Antall G for krav til 12 mnd arbeidsinntekt"] -->|"Oppslag"| B["Prøvingsdato"] - DA["Inntektskrav for siste 12 mnd"] -->|"Multiplikasjon"| BO["Grunnbeløp"] - DA["Inntektskrav for siste 12 mnd"] -->|"Multiplikasjon"| CZ["Antall G for krav til 12 mnd arbeidsinntekt"] - DB["Arbeidsinntekt er over kravet for siste 12 mnd"] -->|"StørreEnnEllerLik"| BT["Arbeidsinntekt siste 12 mnd"] - DB["Arbeidsinntekt er over kravet for siste 12 mnd"] -->|"StørreEnnEllerLik"| DA["Inntektskrav for siste 12 mnd"] - BR["Arbeidsinntekt siste 36 mnd"] -->|"SummerPeriode"| CY["Brutto arbeidsinntekt"] - DC["Antall G for krav til 36 mnd arbeidsinntekt"] -->|"Oppslag"| B["Prøvingsdato"] - DD["Inntektskrav for siste 36 mnd"] -->|"Multiplikasjon"| BO["Grunnbeløp"] - DD["Inntektskrav for siste 36 mnd"] -->|"Multiplikasjon"| DC["Antall G for krav til 36 mnd arbeidsinntekt"] - DE["Arbeidsinntekt er over kravet for siste 36 mnd"] -->|"StørreEnnEllerLik"| BR["Arbeidsinntekt siste 36 mnd"] - DE["Arbeidsinntekt er over kravet for siste 36 mnd"] -->|"StørreEnnEllerLik"| DD["Inntektskrav for siste 36 mnd"] - CA["Krav til minsteinntekt"] -->|"EnAv"| DB["Arbeidsinntekt er over kravet for siste 12 mnd"] - CA["Krav til minsteinntekt"] -->|"EnAv"| DE["Arbeidsinntekt er over kravet for siste 36 mnd"] - DF["Opphold i Norge"] -->|"Oppslag"| B["Prøvingsdato"] - DG["Oppfyller unntak for opphold i Norge"] -->|"Oppslag"| B["Prøvingsdato"] - CL["Oppfyller kravet til opphold i Norge"] -->|"EnAv"| DF["Opphold i Norge"] - CL["Oppfyller kravet til opphold i Norge"] -->|"EnAv"| DG["Oppfyller unntak for opphold i Norge"] - DH["Lovpålagt rapporteringsfrist for A-ordningen"] -->|"Oppslag"| B["Prøvingsdato"] - DI["Arbeidsgivers rapporteringsfrist"] -->|"FørsteArbeidsdag"| DH["Lovpålagt rapporteringsfrist for A-ordningen"] - CX["Siste avsluttende kalendermåned"] -->|"SisteavsluttendeKalenderMåned"| B["Prøvingsdato"] - CX["Siste avsluttende kalendermåned"] -->|"SisteavsluttendeKalenderMåned"| DI["Arbeidsgivers rapporteringsfrist"] - DJ["Det er godkjent at bruker kun søker deltidsarbeid"] -->|"Oppslag"| B["Prøvingsdato"] - DK["Det er godkjent at bruker kun søk arbeid lokalt"] -->|"Oppslag"| B["Prøvingsdato"] - DL["Oppfyller kravet til heltid- og deltidsarbeid"] -->|"EnAv"| DM["Kan jobbe heltid og deltid"] - DL["Oppfyller kravet til heltid- og deltidsarbeid"] -->|"EnAv"| DJ["Det er godkjent at bruker kun søker deltidsarbeid"] - DN["Oppfyller kravet til mobilitet"] -->|"EnAv"| DO["Kan jobbe i hele Norge"] - DN["Oppfyller kravet til mobilitet"] -->|"EnAv"| DK["Det er godkjent at bruker kun søk arbeid lokalt"] - DP["Oppfyller kravet til å være arbeidsfør"] -->|"EnAv"| DQ["Kan ta alle typer arbeid"] - DR["Oppfyller kravet til å ta ethvert arbeid"] -->|"EnAv"| DS["Villig til å bytte yrke"] - CM["Krav til arbeidssøker"] -->|"Alle"| DL["Oppfyller kravet til heltid- og deltidsarbeid"] - CM["Krav til arbeidssøker"] -->|"Alle"| DN["Oppfyller kravet til mobilitet"] - CM["Krav til arbeidssøker"] -->|"Alle"| DP["Oppfyller kravet til å være arbeidsfør"] - CM["Krav til arbeidssøker"] -->|"Alle"| DR["Oppfyller kravet til å ta ethvert arbeid"] - DT["Har rett til ordinære dagpenger uten arbeidsforhold"] -->|"IngenAv"| DU["Har rett til ordinære dagpenger gjennom arbeidsforhold"] - DT["Har rett til ordinære dagpenger uten arbeidsforhold"] -->|"IngenAv"| DV["Har rett til dagpenger under permittering"] - DT["Har rett til ordinære dagpenger uten arbeidsforhold"] -->|"IngenAv"| DW["Har rett til dagpenger etter konkurs"] - DT["Har rett til ordinære dagpenger uten arbeidsforhold"] -->|"IngenAv"| DX["Har rett til dagpenger under permittering i fiskeforedlingsindustri"] - DY["Har rett til ordinære dagpenger"] -->|"EnAv"| DU["Har rett til ordinære dagpenger gjennom arbeidsforhold"] - DY["Har rett til ordinære dagpenger"] -->|"EnAv"| DT["Har rett til ordinære dagpenger uten arbeidsforhold"] - CN["Rettighetstype"] -->|"EnAv"| DY["Har rett til ordinære dagpenger"] - CN["Rettighetstype"] -->|"EnAv"| DV["Har rett til dagpenger under permittering"] - CN["Rettighetstype"] -->|"EnAv"| DW["Har rett til dagpenger etter konkurs"] - CN["Rettighetstype"] -->|"EnAv"| DX["Har rett til dagpenger under permittering i fiskeforedlingsindustri"] - DZ["Mottar pensjon fra en offentlig tjenestepensjonsordning"] -->|"Oppslag"| B["Prøvingsdato"] - EA["Mottar redusert uførepensjon fra offentlig pensjonsordning"] -->|"Oppslag"| B["Prøvingsdato"] - EB["Mottar vartpenger"] -->|"Oppslag"| B["Prøvingsdato"] - EC["Mottar ventelønn"] -->|"Oppslag"| B["Prøvingsdato"] - ED["Mottar etterlønn"] -->|"Oppslag"| B["Prøvingsdato"] - EE["Mottar garantilott fra Garantikassen for fiskere."] -->|"Oppslag"| B["Prøvingsdato"] - EF["Pensjon fra en offentlig tjenestepensjonsordning beløp"] -->|"Oppslag"| B["Prøvingsdato"] - EG["Uførepensjon fra offentlig pensjonsordning beløp"] -->|"Oppslag"| B["Prøvingsdato"] - EH["Vartpenger beløp"] -->|"Oppslag"| B["Prøvingsdato"] - EI["Ventelønn beløp"] -->|"Oppslag"| B["Prøvingsdato"] - EJ["Etterlønn beløp"] -->|"Oppslag"| B["Prøvingsdato"] - EK["Garantilott fra Garantikassen for fiskere beløp"] -->|"Oppslag"| B["Prøvingsdato"] - EL["Sum av ytelser utenfor folketrygden"] -->|"SumAv"| EF["Pensjon fra en offentlig tjenestepensjonsordning beløp"] - EL["Sum av ytelser utenfor folketrygden"] -->|"SumAv"| EG["Uførepensjon fra offentlig pensjonsordning beløp"] - EL["Sum av ytelser utenfor folketrygden"] -->|"SumAv"| EH["Vartpenger beløp"] - EL["Sum av ytelser utenfor folketrygden"] -->|"SumAv"| EI["Ventelønn beløp"] - EL["Sum av ytelser utenfor folketrygden"] -->|"SumAv"| EJ["Etterlønn beløp"] - EL["Sum av ytelser utenfor folketrygden"] -->|"SumAv"| EK["Garantilott fra Garantikassen for fiskere beløp"] - EM["Hvor mange prosent av G skal brukes som terskel ved samordning"] -->|"Oppslag"| B["Prøvingsdato"] - EN["Beløp tilsvarende nedre terskel av G"] -->|"Multiplikasjon"| J["Grunnbeløp for grunnlag"] - EN["Beløp tilsvarende nedre terskel av G"] -->|"Multiplikasjon"| EM["Hvor mange prosent av G skal brukes som terskel ved samordning"] - EO["Samordnet ukessats uten barnetillegg"] -->|"Multiplikasjon"| EP["Samordnet dagsats uten barnetillegg"] - EO["Samordnet ukessats uten barnetillegg"] -->|"Multiplikasjon"| AU["Antall arbeidsdager per uke"] - EQ["Minste mulige ukessats som som kan brukes"] -->|"MinstAv"| EO["Samordnet ukessats uten barnetillegg"] - EQ["Minste mulige ukessats som som kan brukes"] -->|"MinstAv"| EN["Beløp tilsvarende nedre terskel av G"] - ER["Ukessats trukket ned for ytelser utenfor folketrygden"] -->|"Substraksjon"| EO["Samordnet ukessats uten barnetillegg"] - ER["Ukessats trukket ned for ytelser utenfor folketrygden"] -->|"Substraksjon"| EL["Sum av ytelser utenfor folketrygden"] - ES["Samordnet ukessats med ytelser utenfor folketrygden"] -->|"HøyesteAv"| EQ["Minste mulige ukessats som som kan brukes"] - ES["Samordnet ukessats med ytelser utenfor folketrygden"] -->|"HøyesteAv"| ER["Ukessats trukket ned for ytelser utenfor folketrygden"] - BD["Dagsats uten barnetillegg samordnet"] -->|"Divisjon"| ES["Samordnet ukessats med ytelser utenfor folketrygden"] + BT["Arbeidsinntekt siste 12 mnd"] -->|"SummerPeriode"| CW["Brutto arbeidsinntekt"] + CX["Antall G for krav til 12 mnd arbeidsinntekt"] -->|"Oppslag"| B["Prøvingsdato"] + CY["Inntektskrav for siste 12 mnd"] -->|"Multiplikasjon"| BO["Grunnbeløp"] + CY["Inntektskrav for siste 12 mnd"] -->|"Multiplikasjon"| CX["Antall G for krav til 12 mnd arbeidsinntekt"] + CZ["Arbeidsinntekt er over kravet for siste 12 mnd"] -->|"StørreEnnEllerLik"| BT["Arbeidsinntekt siste 12 mnd"] + CZ["Arbeidsinntekt er over kravet for siste 12 mnd"] -->|"StørreEnnEllerLik"| CY["Inntektskrav for siste 12 mnd"] + BR["Arbeidsinntekt siste 36 mnd"] -->|"SummerPeriode"| CW["Brutto arbeidsinntekt"] + DA["Antall G for krav til 36 mnd arbeidsinntekt"] -->|"Oppslag"| B["Prøvingsdato"] + DB["Inntektskrav for siste 36 mnd"] -->|"Multiplikasjon"| BO["Grunnbeløp"] + DB["Inntektskrav for siste 36 mnd"] -->|"Multiplikasjon"| DA["Antall G for krav til 36 mnd arbeidsinntekt"] + DC["Arbeidsinntekt er over kravet for siste 36 mnd"] -->|"StørreEnnEllerLik"| BR["Arbeidsinntekt siste 36 mnd"] + DC["Arbeidsinntekt er over kravet for siste 36 mnd"] -->|"StørreEnnEllerLik"| DB["Inntektskrav for siste 36 mnd"] + CA["Krav til minsteinntekt"] -->|"EnAv"| CZ["Arbeidsinntekt er over kravet for siste 12 mnd"] + CA["Krav til minsteinntekt"] -->|"EnAv"| DC["Arbeidsinntekt er over kravet for siste 36 mnd"] + DD["Opphold i Norge"] -->|"Oppslag"| B["Prøvingsdato"] + DE["Oppfyller unntak for opphold i Norge"] -->|"Oppslag"| B["Prøvingsdato"] + DF["Oppfyller kravet til opphold i Norge"] -->|"EnAv"| DD["Opphold i Norge"] + DF["Oppfyller kravet til opphold i Norge"] -->|"EnAv"| DE["Oppfyller unntak for opphold i Norge"] + DG["Er personen medlem av folketrygden"] -->|"Oppslag"| B["Prøvingsdato"] + DH["Oppfyller kravet til medlemskap"] -->|"ErSann"| DG["Er personen medlem av folketrygden"] + CK["Oppfyller kravet til opphold og medlemskap i Norge"] -->|"Alle"| DF["Oppfyller kravet til opphold i Norge"] + CK["Oppfyller kravet til opphold og medlemskap i Norge"] -->|"Alle"| DH["Oppfyller kravet til medlemskap"] + DI["Lovpålagt rapporteringsfrist for A-ordningen"] -->|"Oppslag"| B["Prøvingsdato"] + DJ["Arbeidsgivers rapporteringsfrist"] -->|"FørsteArbeidsdag"| DI["Lovpålagt rapporteringsfrist for A-ordningen"] + CV["Siste avsluttende kalendermåned"] -->|"SisteavsluttendeKalenderMåned"| B["Prøvingsdato"] + CV["Siste avsluttende kalendermåned"] -->|"SisteavsluttendeKalenderMåned"| DJ["Arbeidsgivers rapporteringsfrist"] + DK["Det er godkjent at bruker kun søker deltidsarbeid"] -->|"Oppslag"| B["Prøvingsdato"] + DL["Det er godkjent at bruker kun søk arbeid lokalt"] -->|"Oppslag"| B["Prøvingsdato"] + DM["Oppfyller kravet til heltid- og deltidsarbeid"] -->|"EnAv"| DN["Kan jobbe heltid og deltid"] + DM["Oppfyller kravet til heltid- og deltidsarbeid"] -->|"EnAv"| DK["Det er godkjent at bruker kun søker deltidsarbeid"] + DO["Oppfyller kravet til mobilitet"] -->|"EnAv"| DP["Kan jobbe i hele Norge"] + DO["Oppfyller kravet til mobilitet"] -->|"EnAv"| DL["Det er godkjent at bruker kun søk arbeid lokalt"] + DQ["Oppfyller kravet til å være arbeidsfør"] -->|"EnAv"| DR["Kan ta alle typer arbeid"] + DS["Oppfyller kravet til å ta ethvert arbeid"] -->|"EnAv"| DT["Villig til å bytte yrke"] + CL["Krav til arbeidssøker"] -->|"Alle"| DM["Oppfyller kravet til heltid- og deltidsarbeid"] + CL["Krav til arbeidssøker"] -->|"Alle"| DO["Oppfyller kravet til mobilitet"] + CL["Krav til arbeidssøker"] -->|"Alle"| DQ["Oppfyller kravet til å være arbeidsfør"] + CL["Krav til arbeidssøker"] -->|"Alle"| DS["Oppfyller kravet til å ta ethvert arbeid"] + DU["Har rett til ordinære dagpenger uten arbeidsforhold"] -->|"IngenAv"| DV["Har rett til ordinære dagpenger gjennom arbeidsforhold"] + DU["Har rett til ordinære dagpenger uten arbeidsforhold"] -->|"IngenAv"| DW["Har rett til dagpenger under permittering"] + DU["Har rett til ordinære dagpenger uten arbeidsforhold"] -->|"IngenAv"| DX["Har rett til dagpenger etter konkurs"] + DU["Har rett til ordinære dagpenger uten arbeidsforhold"] -->|"IngenAv"| DY["Har rett til dagpenger under permittering i fiskeforedlingsindustri"] + DZ["Har rett til ordinære dagpenger"] -->|"EnAv"| DV["Har rett til ordinære dagpenger gjennom arbeidsforhold"] + DZ["Har rett til ordinære dagpenger"] -->|"EnAv"| DU["Har rett til ordinære dagpenger uten arbeidsforhold"] + CM["Rettighetstype"] -->|"EnAv"| DZ["Har rett til ordinære dagpenger"] + CM["Rettighetstype"] -->|"EnAv"| DW["Har rett til dagpenger under permittering"] + CM["Rettighetstype"] -->|"EnAv"| DX["Har rett til dagpenger etter konkurs"] + CM["Rettighetstype"] -->|"EnAv"| DY["Har rett til dagpenger under permittering i fiskeforedlingsindustri"] + EA["Mottar pensjon fra en offentlig tjenestepensjonsordning"] -->|"Oppslag"| B["Prøvingsdato"] + EB["Mottar redusert uførepensjon fra offentlig pensjonsordning"] -->|"Oppslag"| B["Prøvingsdato"] + EC["Mottar vartpenger"] -->|"Oppslag"| B["Prøvingsdato"] + ED["Mottar ventelønn"] -->|"Oppslag"| B["Prøvingsdato"] + EE["Mottar etterlønn"] -->|"Oppslag"| B["Prøvingsdato"] + EF["Mottar garantilott fra Garantikassen for fiskere."] -->|"Oppslag"| B["Prøvingsdato"] + EG["Pensjon fra en offentlig tjenestepensjonsordning beløp"] -->|"Oppslag"| B["Prøvingsdato"] + EH["Uførepensjon fra offentlig pensjonsordning beløp"] -->|"Oppslag"| B["Prøvingsdato"] + EI["Vartpenger beløp"] -->|"Oppslag"| B["Prøvingsdato"] + EJ["Ventelønn beløp"] -->|"Oppslag"| B["Prøvingsdato"] + EK["Etterlønn beløp"] -->|"Oppslag"| B["Prøvingsdato"] + EL["Garantilott fra Garantikassen for fiskere beløp"] -->|"Oppslag"| B["Prøvingsdato"] + EM["Sum av ytelser utenfor folketrygden"] -->|"SumAv"| EG["Pensjon fra en offentlig tjenestepensjonsordning beløp"] + EM["Sum av ytelser utenfor folketrygden"] -->|"SumAv"| EH["Uførepensjon fra offentlig pensjonsordning beløp"] + EM["Sum av ytelser utenfor folketrygden"] -->|"SumAv"| EI["Vartpenger beløp"] + EM["Sum av ytelser utenfor folketrygden"] -->|"SumAv"| EJ["Ventelønn beløp"] + EM["Sum av ytelser utenfor folketrygden"] -->|"SumAv"| EK["Etterlønn beløp"] + EM["Sum av ytelser utenfor folketrygden"] -->|"SumAv"| EL["Garantilott fra Garantikassen for fiskere beløp"] + EN["Hvor mange prosent av G skal brukes som terskel ved samordning"] -->|"Oppslag"| B["Prøvingsdato"] + EO["Beløp tilsvarende nedre terskel av G"] -->|"Multiplikasjon"| J["Grunnbeløp for grunnlag"] + EO["Beløp tilsvarende nedre terskel av G"] -->|"Multiplikasjon"| EN["Hvor mange prosent av G skal brukes som terskel ved samordning"] + EP["Samordnet ukessats uten barnetillegg"] -->|"Multiplikasjon"| EQ["Samordnet dagsats uten barnetillegg"] + EP["Samordnet ukessats uten barnetillegg"] -->|"Multiplikasjon"| AU["Antall arbeidsdager per uke"] + ER["Minste mulige ukessats som som kan brukes"] -->|"MinstAv"| EP["Samordnet ukessats uten barnetillegg"] + ER["Minste mulige ukessats som som kan brukes"] -->|"MinstAv"| EO["Beløp tilsvarende nedre terskel av G"] + ES["Ukessats trukket ned for ytelser utenfor folketrygden"] -->|"Substraksjon"| EP["Samordnet ukessats uten barnetillegg"] + ES["Ukessats trukket ned for ytelser utenfor folketrygden"] -->|"Substraksjon"| EM["Sum av ytelser utenfor folketrygden"] + ET["Samordnet ukessats med ytelser utenfor folketrygden"] -->|"HøyesteAv"| ER["Minste mulige ukessats som som kan brukes"] + ET["Samordnet ukessats med ytelser utenfor folketrygden"] -->|"HøyesteAv"| ES["Ukessats trukket ned for ytelser utenfor folketrygden"] + BD["Dagsats uten barnetillegg samordnet"] -->|"Divisjon"| ET["Samordnet ukessats med ytelser utenfor folketrygden"] BD["Dagsats uten barnetillegg samordnet"] -->|"Divisjon"| AU["Antall arbeidsdager per uke"] - ET["Skal samordnes med ytelser utenfor folketrygden"] -->|"EnAv"| EU["Oppgitt andre ytelser utenfor NAV i søknaden"] - ET["Skal samordnes med ytelser utenfor folketrygden"] -->|"EnAv"| DZ["Mottar pensjon fra en offentlig tjenestepensjonsordning"] - ET["Skal samordnes med ytelser utenfor folketrygden"] -->|"EnAv"| EA["Mottar redusert uførepensjon fra offentlig pensjonsordning"] - ET["Skal samordnes med ytelser utenfor folketrygden"] -->|"EnAv"| EB["Mottar vartpenger"] - ET["Skal samordnes med ytelser utenfor folketrygden"] -->|"EnAv"| EC["Mottar ventelønn"] - ET["Skal samordnes med ytelser utenfor folketrygden"] -->|"EnAv"| ED["Mottar etterlønn"] - ET["Skal samordnes med ytelser utenfor folketrygden"] -->|"EnAv"| EE["Mottar garantilott fra Garantikassen for fiskere."] - ET["Skal samordnes med ytelser utenfor folketrygden"] -->|"EnAv"| EV["Mottar andre økonomiske ytelser fra arbeidsgiver eller tidligere arbeidsgiver enn lønn"] - EW["Sykepenger etter lovens kapittel 8"] -->|"Ekstern"| B["Prøvingsdato"] - EX["Pleiepenger etter lovens kapittel 9"] -->|"Ekstern"| B["Prøvingsdato"] - EY["Omsorgspenger etter lovens kapittel 9"] -->|"Ekstern"| B["Prøvingsdato"] - EZ["Opplæringspenger etter lovens kapittel 9"] -->|"Ekstern"| B["Prøvingsdato"] - FA["Foreldrepenger etter lovens kapittel 14"] -->|"Ekstern"| B["Prøvingsdato"] - FB["Svangerskapspenger etter lovens kapittel 14"] -->|"Ekstern"| B["Prøvingsdato"] - FC["Uføretrygd etter lovens kapittel 12"] -->|"Oppslag"| B["Prøvingsdato"] - FD["Antall timer arbeidstiden skal samordnes mot"] -->|"Oppslag"| B["Prøvingsdato"] - FE["Samordnet fastsatt arbeidstid"] -->|"Substraksjon"| FF["Beregnet vanlig arbeidstid per uke før tap"] - FE["Samordnet fastsatt arbeidstid"] -->|"Substraksjon"| FD["Antall timer arbeidstiden skal samordnes mot"] - FG["Sykepenger dagsats"] -->|"Oppslag"| B["Prøvingsdato"] - FH["Pleiepenger dagsats"] -->|"Oppslag"| B["Prøvingsdato"] - FI["Omsorgspenger dagsats"] -->|"Oppslag"| B["Prøvingsdato"] - FJ["Opplæringspenger dagsats"] -->|"Oppslag"| B["Prøvingsdato"] - FK["Uføre dagsats"] -->|"Oppslag"| B["Prøvingsdato"] - FL["Svangerskapspenger dagsats"] -->|"Oppslag"| B["Prøvingsdato"] - FM["Foreldrepenger dagsats"] -->|"Oppslag"| B["Prøvingsdato"] - FN["Sum andre ytelser"] -->|"Addisjon"| FG["Sykepenger dagsats"] - FN["Sum andre ytelser"] -->|"Addisjon"| FH["Pleiepenger dagsats"] - FN["Sum andre ytelser"] -->|"Addisjon"| FI["Omsorgspenger dagsats"] - FN["Sum andre ytelser"] -->|"Addisjon"| FJ["Opplæringspenger dagsats"] - FN["Sum andre ytelser"] -->|"Addisjon"| FK["Uføre dagsats"] - FN["Sum andre ytelser"] -->|"Addisjon"| FM["Foreldrepenger dagsats"] - FN["Sum andre ytelser"] -->|"Addisjon"| FL["Svangerskapspenger dagsats"] - EP["Samordnet dagsats uten barnetillegg"] -->|"Substraksjon"| BB["Andel av dagsats uten barnetillegg avkortet til maks andel av dagpengegrunnlaget"] - EP["Samordnet dagsats uten barnetillegg"] -->|"Substraksjon"| FN["Sum andre ytelser"] - FO["Samordnet dagsats er negativ eller 0"] -->|"StørreEnnEllerLik"| BB["Andel av dagsats uten barnetillegg avkortet til maks andel av dagpengegrunnlaget"] - FO["Samordnet dagsats er negativ eller 0"] -->|"StørreEnnEllerLik"| FN["Sum andre ytelser"] - CO["Utfall etter samordning"] -->|"EnAv"| FO["Samordnet dagsats er negativ eller 0"] - CO["Utfall etter samordning"] -->|"EnAv"| BH["Har barnetillegg"] - FP["Medlem har reduserte ytelser fra folketrygden (Samordning)"] -->|"EnAv"| EW["Sykepenger etter lovens kapittel 8"] - FP["Medlem har reduserte ytelser fra folketrygden (Samordning)"] -->|"EnAv"| EX["Pleiepenger etter lovens kapittel 9"] - FP["Medlem har reduserte ytelser fra folketrygden (Samordning)"] -->|"EnAv"| EY["Omsorgspenger etter lovens kapittel 9"] - FP["Medlem har reduserte ytelser fra folketrygden (Samordning)"] -->|"EnAv"| EZ["Opplæringspenger etter lovens kapittel 9"] - FP["Medlem har reduserte ytelser fra folketrygden (Samordning)"] -->|"EnAv"| FC["Uføretrygd etter lovens kapittel 12"] - FP["Medlem har reduserte ytelser fra folketrygden (Samordning)"] -->|"EnAv"| FA["Foreldrepenger etter lovens kapittel 14"] - FP["Medlem har reduserte ytelser fra folketrygden (Samordning)"] -->|"EnAv"| FB["Svangerskapspenger etter lovens kapittel 14"] - FQ["Deltar medlemmet i streik eller er omfattet av lock-out?"] -->|"Oppslag"| B["Prøvingsdato"] - FR["Ledig ved samme bedrift eller arbeidsplass, og blir påvirket av utfallet?"] -->|"Oppslag"| B["Prøvingsdato"] - CP["Er medlemmet ikke påvirket av streik eller lock-out?"] -->|"IngenAv"| FQ["Deltar medlemmet i streik eller er omfattet av lock-out?"] - CP["Er medlemmet ikke påvirket av streik eller lock-out?"] -->|"IngenAv"| FR["Ledig ved samme bedrift eller arbeidsplass, og blir påvirket av utfallet?"] - FS["Søknadsdato"] -->|"Ekstern"| AL["søknadId"] - FT["Ønsker dagpenger fra dato"] -->|"Ekstern"| AL["søknadId"] - FU["Søknadstidspunkt"] -->|"SisteAv"| FS["Søknadsdato"] - FU["Søknadstidspunkt"] -->|"SisteAv"| FT["Ønsker dagpenger fra dato"] - B["Prøvingsdato"] -->|"SisteAv"| FU["Søknadstidspunkt"] - FV["Ønsket arbeidstid"] -->|"Ekstern"| AL["søknadId"] - FW["Har tapt arbeid"] -->|"Oppslag"| B["Prøvingsdato"] - FX["Krav på lønn fra tidligere arbeidsgiver"] -->|"Oppslag"| B["Prøvingsdato"] - FY["Ikke krav på lønn fra tidligere arbeidsgiver"] -->|"IngenAv"| FX["Krav på lønn fra tidligere arbeidsgiver"] - FZ["Krav til tap av arbeidsinntekt"] -->|"Alle"| FW["Har tapt arbeid"] - FZ["Krav til tap av arbeidsinntekt"] -->|"Alle"| FY["Ikke krav på lønn fra tidligere arbeidsgiver"] - GA["Krav til prosentvis tap av arbeidstid"] -->|"Oppslag"| B["Prøvingsdato"] - GB["Beregningsregel: Arbeidstid siste 6 måneder"] -->|"Oppslag"| B["Prøvingsdato"] - GC["Beregningsregel: Arbeidstid siste 12 måneder"] -->|"Oppslag"| B["Prøvingsdato"] - GD["Beregeningsregel: Arbeidstid siste 36 måneder"] -->|"Oppslag"| B["Prøvingsdato"] - FF["Beregnet vanlig arbeidstid per uke før tap"] -->|"Oppslag"| B["Prøvingsdato"] - GE["Fastsatt vanlig arbeidstid etter ordinær eller verneplikt"] -->|"HvisSannMedResultat"| GF["Grunnlaget for verneplikt er høyere enn dagpengegrunnlaget"] - GE["Fastsatt vanlig arbeidstid etter ordinær eller verneplikt"] -->|"HvisSannMedResultat"| GG["Fastsatt vanlig arbeidstid for verneplikt"] - GE["Fastsatt vanlig arbeidstid etter ordinær eller verneplikt"] -->|"HvisSannMedResultat"| FF["Beregnet vanlig arbeidstid per uke før tap"] - GH["Ny arbeidstid per uke"] -->|"Oppslag"| B["Prøvingsdato"] - GI["Maksimal vanlig arbeidstid"] -->|"Oppslag"| B["Prøvingsdato"] - GJ["Minimum vanlig arbeidstid"] -->|"Oppslag"| B["Prøvingsdato"] - GK["Fastsatt arbeidstid per uke før tap"] -->|"MinstAv"| GI["Maksimal vanlig arbeidstid"] - GK["Fastsatt arbeidstid per uke før tap"] -->|"MinstAv"| GE["Fastsatt vanlig arbeidstid etter ordinær eller verneplikt"] - GK["Fastsatt arbeidstid per uke før tap"] -->|"MinstAv"| FE["Samordnet fastsatt arbeidstid"] - GK["Fastsatt arbeidstid per uke før tap"] -->|"MinstAv"| FV["Ønsket arbeidstid"] - GL["Fastsatt vanlig arbeidstid er minst minimum arbeidstid"] -->|"StørreEnnEllerLik"| GK["Fastsatt arbeidstid per uke før tap"] - GL["Fastsatt vanlig arbeidstid er minst minimum arbeidstid"] -->|"StørreEnnEllerLik"| GJ["Minimum vanlig arbeidstid"] - GM["Tap av arbeidstid er minst terskel"] -->|"SjekkAvTerskel"| GH["Ny arbeidstid per uke"] - GM["Tap av arbeidstid er minst terskel"] -->|"SjekkAvTerskel"| GK["Fastsatt arbeidstid per uke før tap"] - GM["Tap av arbeidstid er minst terskel"] -->|"SjekkAvTerskel"| GA["Krav til prosentvis tap av arbeidstid"] - GN["Beregningsregel: Tapt arbeidstid"] -->|"EnAv"| GB["Beregningsregel: Arbeidstid siste 6 måneder"] - GN["Beregningsregel: Tapt arbeidstid"] -->|"EnAv"| GC["Beregningsregel: Arbeidstid siste 12 måneder"] - GN["Beregningsregel: Tapt arbeidstid"] -->|"EnAv"| GD["Beregeningsregel: Arbeidstid siste 36 måneder"] - CQ["Krav til tap av arbeidsinntekt og arbeidstid"] -->|"Alle"| FZ["Krav til tap av arbeidsinntekt"] - CQ["Krav til tap av arbeidsinntekt og arbeidstid"] -->|"Alle"| GM["Tap av arbeidstid er minst terskel"] - CQ["Krav til tap av arbeidsinntekt og arbeidstid"] -->|"Alle"| GN["Beregningsregel: Tapt arbeidstid"] - CQ["Krav til tap av arbeidsinntekt og arbeidstid"] -->|"Alle"| GL["Fastsatt vanlig arbeidstid er minst minimum arbeidstid"] - GO["Deltar i arbeidsmarkedstiltak"] -->|"Oppslag"| B["Prøvingsdato"] - GP["Deltar i opplæring for innvandrere"] -->|"Oppslag"| B["Prøvingsdato"] - GQ["Deltar i grunnskoleopplæring, videregående opplæring og opplæring i grunnleggende ferdigheter"] -->|"Oppslag"| B["Prøvingsdato"] - GR["Deltar i høyere yrkesfaglig utdanning"] -->|"Oppslag"| B["Prøvingsdato"] - GS["Deltar i høyere utdanning"] -->|"Oppslag"| B["Prøvingsdato"] - GT["Deltar på kurs mv"] -->|"Oppslag"| B["Prøvingsdato"] - GU["Godkjent unntak for utdanning eller opplæring?"] -->|"EnAv"| GO["Deltar i arbeidsmarkedstiltak"] - GU["Godkjent unntak for utdanning eller opplæring?"] -->|"EnAv"| GP["Deltar i opplæring for innvandrere"] - GU["Godkjent unntak for utdanning eller opplæring?"] -->|"EnAv"| GQ["Deltar i grunnskoleopplæring, videregående opplæring og opplæring i grunnleggende ferdigheter"] - GU["Godkjent unntak for utdanning eller opplæring?"] -->|"EnAv"| GR["Deltar i høyere yrkesfaglig utdanning"] - GU["Godkjent unntak for utdanning eller opplæring?"] -->|"EnAv"| GS["Deltar i høyere utdanning"] - GU["Godkjent unntak for utdanning eller opplæring?"] -->|"EnAv"| GT["Deltar på kurs mv"] - GV["Har svart ja på spørsmål om utdanning eller opplæring"] -->|"ErSann"| GW["Tar utdanning eller opplæring?"] - GX["Har svart nei på spørsmål om utdanning eller opplæring"] -->|"ErUsann"| GW["Tar utdanning eller opplæring?"] - GY["Oppfyller kravet på unntak for utdanning eller opplæring"] -->|"Alle"| GV["Har svart ja på spørsmål om utdanning eller opplæring"] - GY["Oppfyller kravet på unntak for utdanning eller opplæring"] -->|"Alle"| GU["Godkjent unntak for utdanning eller opplæring?"] - CR["Krav til utdanning eller opplæring"] -->|"EnAv"| GY["Oppfyller kravet på unntak for utdanning eller opplæring"] - CR["Krav til utdanning eller opplæring"] -->|"EnAv"| GX["Har svart nei på spørsmål om utdanning eller opplæring"] - GZ["Bruker er utestengt fra dagpenger"] -->|"Oppslag"| B["Prøvingsdato"] - CS["Oppfyller krav til ikke utestengt"] -->|"IngenAv"| GZ["Bruker er utestengt fra dagpenger"] - HA["Avtjent verneplikt"] -->|"Ekstern"| AL["søknadId"] - CH["Har utført minst tre måneders militærtjeneste eller obligatorisk sivilforsvarstjeneste"] -->|"ErSann"| HA["Avtjent verneplikt"] - HB["Antall G som gis som grunnlag ved verneplikt"] -->|"Oppslag"| B["Prøvingsdato"] - HC["Grunnlag for gis ved verneplikt"] -->|"Multiplikasjon"| J["Grunnbeløp for grunnlag"] - HC["Grunnlag for gis ved verneplikt"] -->|"Multiplikasjon"| HB["Antall G som gis som grunnlag ved verneplikt"] - HD["Periode som gis ved verneplikt"] -->|"Oppslag"| B["Prøvingsdato"] - GG["Fastsatt vanlig arbeidstid for verneplikt"] -->|"Oppslag"| B["Prøvingsdato"] - HE["Grunnlag for verneplikt hvis kravet ikke er oppfylt"] -->|"Oppslag"| B["Prøvingsdato"] + EU["Skal samordnes med ytelser utenfor folketrygden"] -->|"EnAv"| EV["Oppgitt andre ytelser utenfor NAV i søknaden"] + EU["Skal samordnes med ytelser utenfor folketrygden"] -->|"EnAv"| EA["Mottar pensjon fra en offentlig tjenestepensjonsordning"] + EU["Skal samordnes med ytelser utenfor folketrygden"] -->|"EnAv"| EB["Mottar redusert uførepensjon fra offentlig pensjonsordning"] + EU["Skal samordnes med ytelser utenfor folketrygden"] -->|"EnAv"| EC["Mottar vartpenger"] + EU["Skal samordnes med ytelser utenfor folketrygden"] -->|"EnAv"| ED["Mottar ventelønn"] + EU["Skal samordnes med ytelser utenfor folketrygden"] -->|"EnAv"| EE["Mottar etterlønn"] + EU["Skal samordnes med ytelser utenfor folketrygden"] -->|"EnAv"| EF["Mottar garantilott fra Garantikassen for fiskere."] + EU["Skal samordnes med ytelser utenfor folketrygden"] -->|"EnAv"| EW["Mottar andre økonomiske ytelser fra arbeidsgiver eller tidligere arbeidsgiver enn lønn"] + EX["Sykepenger etter lovens kapittel 8"] -->|"Ekstern"| B["Prøvingsdato"] + EY["Pleiepenger etter lovens kapittel 9"] -->|"Ekstern"| B["Prøvingsdato"] + EZ["Omsorgspenger etter lovens kapittel 9"] -->|"Ekstern"| B["Prøvingsdato"] + FA["Opplæringspenger etter lovens kapittel 9"] -->|"Ekstern"| B["Prøvingsdato"] + FB["Foreldrepenger etter lovens kapittel 14"] -->|"Ekstern"| B["Prøvingsdato"] + FC["Svangerskapspenger etter lovens kapittel 14"] -->|"Ekstern"| B["Prøvingsdato"] + FD["Uføretrygd etter lovens kapittel 12"] -->|"Oppslag"| B["Prøvingsdato"] + FE["Antall timer arbeidstiden skal samordnes mot"] -->|"Oppslag"| B["Prøvingsdato"] + FF["Samordnet fastsatt arbeidstid"] -->|"Substraksjon"| FG["Beregnet vanlig arbeidstid per uke før tap"] + FF["Samordnet fastsatt arbeidstid"] -->|"Substraksjon"| FE["Antall timer arbeidstiden skal samordnes mot"] + FH["Sykepenger dagsats"] -->|"Oppslag"| B["Prøvingsdato"] + FI["Pleiepenger dagsats"] -->|"Oppslag"| B["Prøvingsdato"] + FJ["Omsorgspenger dagsats"] -->|"Oppslag"| B["Prøvingsdato"] + FK["Opplæringspenger dagsats"] -->|"Oppslag"| B["Prøvingsdato"] + FL["Uføre dagsats"] -->|"Oppslag"| B["Prøvingsdato"] + FM["Svangerskapspenger dagsats"] -->|"Oppslag"| B["Prøvingsdato"] + FN["Foreldrepenger dagsats"] -->|"Oppslag"| B["Prøvingsdato"] + FO["Sum andre ytelser"] -->|"Addisjon"| FH["Sykepenger dagsats"] + FO["Sum andre ytelser"] -->|"Addisjon"| FI["Pleiepenger dagsats"] + FO["Sum andre ytelser"] -->|"Addisjon"| FJ["Omsorgspenger dagsats"] + FO["Sum andre ytelser"] -->|"Addisjon"| FK["Opplæringspenger dagsats"] + FO["Sum andre ytelser"] -->|"Addisjon"| FL["Uføre dagsats"] + FO["Sum andre ytelser"] -->|"Addisjon"| FN["Foreldrepenger dagsats"] + FO["Sum andre ytelser"] -->|"Addisjon"| FM["Svangerskapspenger dagsats"] + EQ["Samordnet dagsats uten barnetillegg"] -->|"Substraksjon"| BB["Andel av dagsats uten barnetillegg avkortet til maks andel av dagpengegrunnlaget"] + EQ["Samordnet dagsats uten barnetillegg"] -->|"Substraksjon"| FO["Sum andre ytelser"] + FP["Samordnet dagsats er negativ eller 0"] -->|"StørreEnnEllerLik"| BB["Andel av dagsats uten barnetillegg avkortet til maks andel av dagpengegrunnlaget"] + FP["Samordnet dagsats er negativ eller 0"] -->|"StørreEnnEllerLik"| FO["Sum andre ytelser"] + CN["Utfall etter samordning"] -->|"EnAv"| FP["Samordnet dagsats er negativ eller 0"] + CN["Utfall etter samordning"] -->|"EnAv"| BH["Har barnetillegg"] + FQ["Medlem har reduserte ytelser fra folketrygden (Samordning)"] -->|"EnAv"| EX["Sykepenger etter lovens kapittel 8"] + FQ["Medlem har reduserte ytelser fra folketrygden (Samordning)"] -->|"EnAv"| EY["Pleiepenger etter lovens kapittel 9"] + FQ["Medlem har reduserte ytelser fra folketrygden (Samordning)"] -->|"EnAv"| EZ["Omsorgspenger etter lovens kapittel 9"] + FQ["Medlem har reduserte ytelser fra folketrygden (Samordning)"] -->|"EnAv"| FA["Opplæringspenger etter lovens kapittel 9"] + FQ["Medlem har reduserte ytelser fra folketrygden (Samordning)"] -->|"EnAv"| FD["Uføretrygd etter lovens kapittel 12"] + FQ["Medlem har reduserte ytelser fra folketrygden (Samordning)"] -->|"EnAv"| FB["Foreldrepenger etter lovens kapittel 14"] + FQ["Medlem har reduserte ytelser fra folketrygden (Samordning)"] -->|"EnAv"| FC["Svangerskapspenger etter lovens kapittel 14"] + FR["Deltar medlemmet i streik eller er omfattet av lock-out?"] -->|"Oppslag"| B["Prøvingsdato"] + FS["Ledig ved samme bedrift eller arbeidsplass, og blir påvirket av utfallet?"] -->|"Oppslag"| B["Prøvingsdato"] + CO["Er medlemmet ikke påvirket av streik eller lock-out?"] -->|"IngenAv"| FR["Deltar medlemmet i streik eller er omfattet av lock-out?"] + CO["Er medlemmet ikke påvirket av streik eller lock-out?"] -->|"IngenAv"| FS["Ledig ved samme bedrift eller arbeidsplass, og blir påvirket av utfallet?"] + FT["Søknadsdato"] -->|"Ekstern"| AL["søknadId"] + FU["Ønsker dagpenger fra dato"] -->|"Ekstern"| AL["søknadId"] + FV["Søknadstidspunkt"] -->|"SisteAv"| FT["Søknadsdato"] + FV["Søknadstidspunkt"] -->|"SisteAv"| FU["Ønsker dagpenger fra dato"] + B["Prøvingsdato"] -->|"SisteAv"| FV["Søknadstidspunkt"] + FW["Ønsket arbeidstid"] -->|"Ekstern"| AL["søknadId"] + FX["Har tapt arbeid"] -->|"Oppslag"| B["Prøvingsdato"] + FY["Krav på lønn fra tidligere arbeidsgiver"] -->|"Oppslag"| B["Prøvingsdato"] + FZ["Ikke krav på lønn fra tidligere arbeidsgiver"] -->|"IngenAv"| FY["Krav på lønn fra tidligere arbeidsgiver"] + GA["Krav til tap av arbeidsinntekt"] -->|"Alle"| FX["Har tapt arbeid"] + GA["Krav til tap av arbeidsinntekt"] -->|"Alle"| FZ["Ikke krav på lønn fra tidligere arbeidsgiver"] + GB["Krav til prosentvis tap av arbeidstid"] -->|"Oppslag"| B["Prøvingsdato"] + GC["Beregningsregel: Arbeidstid siste 6 måneder"] -->|"Oppslag"| B["Prøvingsdato"] + GD["Beregningsregel: Arbeidstid siste 12 måneder"] -->|"Oppslag"| B["Prøvingsdato"] + GE["Beregeningsregel: Arbeidstid siste 36 måneder"] -->|"Oppslag"| B["Prøvingsdato"] + FG["Beregnet vanlig arbeidstid per uke før tap"] -->|"Oppslag"| B["Prøvingsdato"] + GF["Fastsatt vanlig arbeidstid etter ordinær eller verneplikt"] -->|"HvisSannMedResultat"| GG["Grunnlaget for verneplikt er høyere enn dagpengegrunnlaget"] + GF["Fastsatt vanlig arbeidstid etter ordinær eller verneplikt"] -->|"HvisSannMedResultat"| GH["Fastsatt vanlig arbeidstid for verneplikt"] + GF["Fastsatt vanlig arbeidstid etter ordinær eller verneplikt"] -->|"HvisSannMedResultat"| FG["Beregnet vanlig arbeidstid per uke før tap"] + GI["Ny arbeidstid per uke"] -->|"Oppslag"| B["Prøvingsdato"] + GJ["Maksimal vanlig arbeidstid"] -->|"Oppslag"| B["Prøvingsdato"] + GK["Minimum vanlig arbeidstid"] -->|"Oppslag"| B["Prøvingsdato"] + GL["Fastsatt arbeidstid per uke før tap"] -->|"MinstAv"| GJ["Maksimal vanlig arbeidstid"] + GL["Fastsatt arbeidstid per uke før tap"] -->|"MinstAv"| GF["Fastsatt vanlig arbeidstid etter ordinær eller verneplikt"] + GL["Fastsatt arbeidstid per uke før tap"] -->|"MinstAv"| FF["Samordnet fastsatt arbeidstid"] + GL["Fastsatt arbeidstid per uke før tap"] -->|"MinstAv"| FW["Ønsket arbeidstid"] + GM["Fastsatt vanlig arbeidstid er minst minimum arbeidstid"] -->|"StørreEnnEllerLik"| GL["Fastsatt arbeidstid per uke før tap"] + GM["Fastsatt vanlig arbeidstid er minst minimum arbeidstid"] -->|"StørreEnnEllerLik"| GK["Minimum vanlig arbeidstid"] + GN["Tap av arbeidstid er minst terskel"] -->|"SjekkAvTerskel"| GI["Ny arbeidstid per uke"] + GN["Tap av arbeidstid er minst terskel"] -->|"SjekkAvTerskel"| GL["Fastsatt arbeidstid per uke før tap"] + GN["Tap av arbeidstid er minst terskel"] -->|"SjekkAvTerskel"| GB["Krav til prosentvis tap av arbeidstid"] + GO["Beregningsregel: Tapt arbeidstid"] -->|"EnAv"| GC["Beregningsregel: Arbeidstid siste 6 måneder"] + GO["Beregningsregel: Tapt arbeidstid"] -->|"EnAv"| GD["Beregningsregel: Arbeidstid siste 12 måneder"] + GO["Beregningsregel: Tapt arbeidstid"] -->|"EnAv"| GE["Beregeningsregel: Arbeidstid siste 36 måneder"] + CP["Krav til tap av arbeidsinntekt og arbeidstid"] -->|"Alle"| GA["Krav til tap av arbeidsinntekt"] + CP["Krav til tap av arbeidsinntekt og arbeidstid"] -->|"Alle"| GN["Tap av arbeidstid er minst terskel"] + CP["Krav til tap av arbeidsinntekt og arbeidstid"] -->|"Alle"| GO["Beregningsregel: Tapt arbeidstid"] + CP["Krav til tap av arbeidsinntekt og arbeidstid"] -->|"Alle"| GM["Fastsatt vanlig arbeidstid er minst minimum arbeidstid"] + GP["Deltar i arbeidsmarkedstiltak"] -->|"Oppslag"| B["Prøvingsdato"] + GQ["Deltar i opplæring for innvandrere"] -->|"Oppslag"| B["Prøvingsdato"] + GR["Deltar i grunnskoleopplæring, videregående opplæring og opplæring i grunnleggende ferdigheter"] -->|"Oppslag"| B["Prøvingsdato"] + GS["Deltar i høyere yrkesfaglig utdanning"] -->|"Oppslag"| B["Prøvingsdato"] + GT["Deltar i høyere utdanning"] -->|"Oppslag"| B["Prøvingsdato"] + GU["Deltar på kurs mv"] -->|"Oppslag"| B["Prøvingsdato"] + GV["Godkjent unntak for utdanning eller opplæring?"] -->|"EnAv"| GP["Deltar i arbeidsmarkedstiltak"] + GV["Godkjent unntak for utdanning eller opplæring?"] -->|"EnAv"| GQ["Deltar i opplæring for innvandrere"] + GV["Godkjent unntak for utdanning eller opplæring?"] -->|"EnAv"| GR["Deltar i grunnskoleopplæring, videregående opplæring og opplæring i grunnleggende ferdigheter"] + GV["Godkjent unntak for utdanning eller opplæring?"] -->|"EnAv"| GS["Deltar i høyere yrkesfaglig utdanning"] + GV["Godkjent unntak for utdanning eller opplæring?"] -->|"EnAv"| GT["Deltar i høyere utdanning"] + GV["Godkjent unntak for utdanning eller opplæring?"] -->|"EnAv"| GU["Deltar på kurs mv"] + GW["Har svart ja på spørsmål om utdanning eller opplæring"] -->|"ErSann"| GX["Tar utdanning eller opplæring?"] + GY["Har svart nei på spørsmål om utdanning eller opplæring"] -->|"ErUsann"| GX["Tar utdanning eller opplæring?"] + GZ["Oppfyller kravet på unntak for utdanning eller opplæring"] -->|"Alle"| GW["Har svart ja på spørsmål om utdanning eller opplæring"] + GZ["Oppfyller kravet på unntak for utdanning eller opplæring"] -->|"Alle"| GV["Godkjent unntak for utdanning eller opplæring?"] + CQ["Krav til utdanning eller opplæring"] -->|"EnAv"| GZ["Oppfyller kravet på unntak for utdanning eller opplæring"] + CQ["Krav til utdanning eller opplæring"] -->|"EnAv"| GY["Har svart nei på spørsmål om utdanning eller opplæring"] + HA["Bruker er utestengt fra dagpenger"] -->|"Oppslag"| B["Prøvingsdato"] + CR["Oppfyller krav til ikke utestengt"] -->|"IngenAv"| HA["Bruker er utestengt fra dagpenger"] + HB["Avtjent verneplikt"] -->|"Ekstern"| AL["søknadId"] + CH["Har utført minst tre måneders militærtjeneste eller obligatorisk sivilforsvarstjeneste"] -->|"ErSann"| HB["Avtjent verneplikt"] + HC["Antall G som gis som grunnlag ved verneplikt"] -->|"Oppslag"| B["Prøvingsdato"] + HD["Grunnlag for gis ved verneplikt"] -->|"Multiplikasjon"| J["Grunnbeløp for grunnlag"] + HD["Grunnlag for gis ved verneplikt"] -->|"Multiplikasjon"| HC["Antall G som gis som grunnlag ved verneplikt"] + HE["Periode som gis ved verneplikt"] -->|"Oppslag"| B["Prøvingsdato"] + GH["Fastsatt vanlig arbeidstid for verneplikt"] -->|"Oppslag"| B["Prøvingsdato"] + HF["Grunnlag for verneplikt hvis kravet ikke er oppfylt"] -->|"Oppslag"| B["Prøvingsdato"] AF["Grunnlag for verneplikt hvis kravet er oppfylt"] -->|"HvisSannMedResultat"| CH["Har utført minst tre måneders militærtjeneste eller obligatorisk sivilforsvarstjeneste"] - AF["Grunnlag for verneplikt hvis kravet er oppfylt"] -->|"HvisSannMedResultat"| HC["Grunnlag for gis ved verneplikt"] - AF["Grunnlag for verneplikt hvis kravet er oppfylt"] -->|"HvisSannMedResultat"| HE["Grunnlag for verneplikt hvis kravet ikke er oppfylt"] - GF["Grunnlaget for verneplikt er høyere enn dagpengegrunnlaget"] -->|"StørreEnn"| AF["Grunnlag for verneplikt hvis kravet er oppfylt"] - GF["Grunnlaget for verneplikt er høyere enn dagpengegrunnlaget"] -->|"StørreEnn"| AD["Grunnlag ved ordinære dagpenger"] - HF["EttBeregnetVirkningstidspunkt"] -->|"FraOgMedForOpplysning"| CI["Krav på dagpenger"] + AF["Grunnlag for verneplikt hvis kravet er oppfylt"] -->|"HvisSannMedResultat"| HD["Grunnlag for gis ved verneplikt"] + AF["Grunnlag for verneplikt hvis kravet er oppfylt"] -->|"HvisSannMedResultat"| HF["Grunnlag for verneplikt hvis kravet ikke er oppfylt"] + GG["Grunnlaget for verneplikt er høyere enn dagpengegrunnlaget"] -->|"StørreEnn"| AF["Grunnlag for verneplikt hvis kravet er oppfylt"] + GG["Grunnlaget for verneplikt er høyere enn dagpengegrunnlaget"] -->|"StørreEnn"| AD["Grunnlag ved ordinære dagpenger"] + HG["EttBeregnetVirkningstidspunkt"] -->|"FraOgMedForOpplysning"| CI["Krav på dagpenger"] ``` \ No newline at end of file diff --git "a/docs/regler/\302\247 4-2. Opphold i Norge.approved.md" "b/docs/regler/\302\247 4-2. Opphold i Norge.approved.md" index 7ff69834e..54ceffdb2 100644 --- "a/docs/regler/\302\247 4-2. Opphold i Norge.approved.md" +++ "b/docs/regler/\302\247 4-2. Opphold i Norge.approved.md" @@ -8,6 +8,10 @@ graph RL C["Oppfyller unntak for opphold i Norge"] -->|"Oppslag"| B["Prøvingsdato"] D["Oppfyller kravet til opphold i Norge"] -->|"EnAv"| A["Opphold i Norge"] D["Oppfyller kravet til opphold i Norge"] -->|"EnAv"| C["Oppfyller unntak for opphold i Norge"] + E["Er personen medlem av folketrygden"] -->|"Oppslag"| B["Prøvingsdato"] + F["Oppfyller kravet til medlemskap"] -->|"ErSann"| E["Er personen medlem av folketrygden"] + G["Oppfyller kravet til opphold og medlemskap i Norge"] -->|"Alle"| D["Oppfyller kravet til opphold i Norge"] + G["Oppfyller kravet til opphold og medlemskap i Norge"] -->|"Alle"| F["Oppfyller kravet til medlemskap"] ``` ## Akseptansetester @@ -32,4 +36,14 @@ Egenskap: § 4-2. Opphold i Norge Gitt at personen oppholder seg ikke i Norge Men at personen oppfyller ett unntak for opphold Så skal vilkåret om opphold i Norge være oppfylt + + Scenariomal: Søker oppfyller § 4-2. Medlemskap + Gitt at søker har søkt om dagpenger og er medlem? + Og at personen er medlem "" i folketrygden + Så skal vilkåret om medlemskap være "" + + Eksempler: + | svar | utfall | + | ja | ja | + | nei | nei | ``` \ No newline at end of file diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/Vedtak.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/Vedtak.kt index aa274a7f2..8afbe8b83 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/Vedtak.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/Vedtak.kt @@ -27,7 +27,6 @@ import no.nav.dagpenger.regel.Alderskrav import no.nav.dagpenger.regel.FulleYtelser import no.nav.dagpenger.regel.KravPåDagpenger.kravPåDagpenger import no.nav.dagpenger.regel.KravPåDagpenger.minsteinntektEllerVerneplikt -import no.nav.dagpenger.regel.Medlemskap import no.nav.dagpenger.regel.Meldeplikt import no.nav.dagpenger.regel.Minsteinntekt.minsteinntekt import no.nav.dagpenger.regel.Opphold @@ -61,7 +60,7 @@ private val autorativKildeForDetViPåEkteMenerErVilkår: Map Date: Tue, 14 Jan 2025 13:53:41 +0100 Subject: [PATCH 15/28] =?UTF-8?q?Ta=20med=20utfall=20p=C3=A5=20regelsett?= =?UTF-8?q?=20inn=20i=20API=20mappingen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tonje Mjøvik Myran Co-authored-by: Eivind Havnelid Røyrvik --- .../src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt b/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt index fb409d213..e15e431f0 100644 --- a/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt +++ b/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt @@ -19,7 +19,7 @@ class Regelsett( private val regler: MutableMap, TemporalCollection>> = mutableMapOf() private val avklaringer: MutableSet = mutableSetOf() private var _utfall: Opplysningstype? = null - val utfall = _utfall + val utfall get() = _utfall init { block() From 3f8ba2ad30fbcd191162844ddf3d67ff4f39fe6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Andr=C3=A9=20Lund?= Date: Tue, 14 Jan 2025 14:03:32 +0100 Subject: [PATCH 16/28] Legger til indeks for henholdsvis opplysninger_id og opplysing_id i opplysninger_opplysning tabellen. Lager transaksjon per kandidat vi sletter. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Richard André Martinsen --- .../jobber/SlettFjernetOpplysninger.kt | 4 ++-- .../repository/VaktmesterPostgresRepo.kt | 20 +++++++++---------- ...V36__INDEKS_OPPLYSNINGER_OPPLYSNING_ID.sql | 2 ++ .../behandling/db/PostgresMigrationTest.kt | 2 +- 4 files changed, 15 insertions(+), 13 deletions(-) create mode 100644 mediator/src/main/resources/db/migration/V36__INDEKS_OPPLYSNINGER_OPPLYSNING_ID.sql diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt index 03685c793..9e0981f86 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt @@ -18,8 +18,8 @@ internal object SlettFjernetOpplysninger { period = 15.minutes.inWholeMilliseconds, action = { try { - if (System.getenv("NAIS_CLUSTER_NAME") == "skrudd-av") { - vaktmesterRepository.slettOpplysninger(antall = 10) + if (System.getenv("NAIS_CLUSTER_NAME") == "DEV-GCP") { + vaktmesterRepository.slettOpplysninger(antall = 1) } else { logger.info { "Sletting av fjernet opplysninger er skrudd av" } } diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt index 7c12d79b2..1bed89821 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt @@ -1,7 +1,6 @@ package no.nav.dagpenger.behandling.mediator.repository import kotliquery.Session -import kotliquery.TransactionalSession import kotliquery.queryOf import kotliquery.sessionOf import kotliquery.using @@ -21,9 +20,10 @@ internal class VaktmesterPostgresRepo { fun slettOpplysninger(antall: Int = 1): List { val slettet = mutableListOf() using(sessionOf(dataSource)) { session -> - session.transaction { tx -> - tx.medLås(låsenøkkel) { - hentAlleOpplysningerSomErFjernet(tx, antall).forEach { kandidat -> + val kandidater = hentAlleOpplysningerSomErFjernet(session, antall) + kandidater.forEach { kandidat -> + session.transaction { tx -> + tx.medLås(låsenøkkel) { withLoggingContext( "behandlingId" to kandidat.behandlingId.toString(), "opplysningerId" to kandidat.opplysningerId.toString(), @@ -42,7 +42,7 @@ internal class VaktmesterPostgresRepo { } slettet.add(opplysningId) } - logger.info { "Slettet ${kandidat.opplysninger().size} opplysninger " } + logger.info { "Slettet ${kandidat.opplysninger().size} opplysninger" } } } } @@ -64,10 +64,10 @@ internal class VaktmesterPostgresRepo { } private fun hentAlleOpplysningerSomErFjernet( - tx: TransactionalSession, + session: Session, antall: Int, ): List { - val kandidater = hentOpplysningerIder(tx, antall) + val kandidater = hentOpplysningerIder(session, antall) //language=PostgreSQL val query = @@ -81,7 +81,7 @@ internal class VaktmesterPostgresRepo { val opplysninger = kandidater.onEach { kandidat -> - tx.run( + session.run( queryOf( query, mapOf("opplysninger_id" to kandidat.opplysningerId), @@ -97,7 +97,7 @@ internal class VaktmesterPostgresRepo { } private fun hentOpplysningerIder( - tx: TransactionalSession, + session: Session, antall: Int, ): List { //language=PostgreSQL @@ -112,7 +112,7 @@ internal class VaktmesterPostgresRepo { """.trimIndent() val opplysningerIder = - tx.run( + session.run( queryOf( test, mapOf("antall" to antall), diff --git a/mediator/src/main/resources/db/migration/V36__INDEKS_OPPLYSNINGER_OPPLYSNING_ID.sql b/mediator/src/main/resources/db/migration/V36__INDEKS_OPPLYSNINGER_OPPLYSNING_ID.sql new file mode 100644 index 000000000..bf80d35a5 --- /dev/null +++ b/mediator/src/main/resources/db/migration/V36__INDEKS_OPPLYSNINGER_OPPLYSNING_ID.sql @@ -0,0 +1,2 @@ +CREATE INDEX idx_opplysninger_opplysning_id ON opplysninger_opplysning (opplysning_id); +CREATE INDEX idx_opplysninger_opplysninger_id ON opplysninger_opplysning (opplysninger_id); \ No newline at end of file diff --git a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/db/PostgresMigrationTest.kt b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/db/PostgresMigrationTest.kt index c2d9435a0..82686983b 100644 --- a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/db/PostgresMigrationTest.kt +++ b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/db/PostgresMigrationTest.kt @@ -10,7 +10,7 @@ class PostgresMigrationTest { fun `Migration scripts are applied successfully`() { withCleanDb { val migrations = runMigration() - migrations shouldBeExactly 34 + migrations shouldBeExactly 35 } } } From 1cedb7057caf4b259586ed956a350176c0f607ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Andr=C3=A9=20Lund?= Date: Tue, 14 Jan 2025 14:13:38 +0100 Subject: [PATCH 17/28] =?UTF-8?q?Skru=20p=C3=A5=20slettejobb=20for=20dev.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Richard André Martinsen --- .../behandling/mediator/jobber/SlettFjernetOpplysninger.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt index 9e0981f86..53025cf07 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt @@ -18,7 +18,7 @@ internal object SlettFjernetOpplysninger { period = 15.minutes.inWholeMilliseconds, action = { try { - if (System.getenv("NAIS_CLUSTER_NAME") == "DEV-GCP") { + if (System.getenv("NAIS_CLUSTER_NAME") == "dev-gcp") { vaktmesterRepository.slettOpplysninger(antall = 1) } else { logger.info { "Sletting av fjernet opplysninger er skrudd av" } From 4435fdbf46b9271e613641c6453008d167fc0387 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Roaldseth?= Date: Tue, 14 Jan 2025 14:20:04 +0100 Subject: [PATCH 18/28] =?UTF-8?q?Legg=20p=C3=A5=20kort=20navn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tonje Mjøvik Myran Co-authored-by: Eivind Havnelid Røyrvik Co-authored-by: Sindre Sægrov Co-authored-by: Mette Wendy Lindberg Gulbrandsen Co-authored-by: Morten Tholander --- .../src/main/kotlin/no/nav/dagpenger/regel/Alderskrav.kt | 5 ++++- .../src/main/kotlin/no/nav/dagpenger/regel/FulleYtelser.kt | 5 ++++- .../src/main/kotlin/no/nav/dagpenger/regel/Medlemskap.kt | 3 --- .../src/main/kotlin/no/nav/dagpenger/regel/Meldeplikt.kt | 5 ++++- .../src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt | 5 ++++- dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt | 5 ++++- .../main/kotlin/no/nav/dagpenger/regel/Opptjeningstid.kt | 6 +++++- .../no/nav/dagpenger/regel/ReellArbeidss\303\270ker.kt" | 5 ++++- .../main/kotlin/no/nav/dagpenger/regel/Rettighetstype.kt | 6 +++++- .../no/nav/dagpenger/regel/SamordingUtenforFolketrygden.kt | 5 ++++- .../src/main/kotlin/no/nav/dagpenger/regel/Samordning.kt | 1 + .../main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt | 5 ++++- .../nav/dagpenger/regel/TapAvArbeidsinntektOgArbeidstid.kt | 5 ++++- .../src/main/kotlin/no/nav/dagpenger/regel/Utdanning.kt | 5 ++++- .../src/main/kotlin/no/nav/dagpenger/regel/Utestengning.kt | 5 ++++- .../src/main/kotlin/no/nav/dagpenger/regel/Verneplikt.kt | 5 ++++- .../kotlin/no/nav/dagpenger/regel/Virkningstidspunkt.kt | 5 ++++- .../no/nav/dagpenger/regel/fastsetting/Dagpengegrunnlag.kt | 6 +++++- .../regel/fastsetting/DagpengenesSt\303\270rrelse.kt" | 6 +++++- .../no/nav/dagpenger/regel/fastsetting/Dagpengeperiode.kt | 6 +++++- .../kotlin/no/nav/dagpenger/regel/fastsetting/Egenandel.kt | 6 +++++- .../dagpenger/regel/fastsetting/VernepliktFastsetting.kt | 6 +++++- .../behandling/mediator/api/BehandlingApiMapper.kt | 3 ++- .../dagpenger/behandling/mediator/api/BehandlingApiTest.kt | 2 +- openapi/src/main/resources/behandling-api.yaml | 4 ++++ .../main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt | 4 +++- 26 files changed, 98 insertions(+), 26 deletions(-) delete mode 100644 dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Medlemskap.kt diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Alderskrav.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Alderskrav.kt index a2f0d9e08..1fd967129 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Alderskrav.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Alderskrav.kt @@ -24,7 +24,10 @@ object Alderskrav { val kravTilAlder = Opplysningstype.somBoolsk("Oppfyller kravet til alder") val regelsett = - Regelsett("§ 4-23. Bortfall på grunn av alder") { + Regelsett( + "4-23 Alder", + "§ 4-23. Bortfall på grunn av alder", + ) { regel(fødselsdato) { innhentes } regel(aldersgrense) { oppslag(virkningsdato) { 67 } } regel(sisteMåned) { leggTilÅr(fødselsdato, aldersgrense) } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/FulleYtelser.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/FulleYtelser.kt index b713954eb..45fe17297 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/FulleYtelser.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/FulleYtelser.kt @@ -12,7 +12,10 @@ object FulleYtelser { val ikkeFulleYtelser = Opplysningstype.somBoolsk("Mottar ikke andre fulle ytelser") val regelsett = - Regelsett("§ 4-24. Medlem som har fulle ytelser etter folketrygdloven eller avtalefestet pensjon") { + Regelsett( + "4-24 Fulle ytelser", + "§ 4-24. Medlem som har fulle ytelser etter folketrygdloven eller avtalefestet pensjon", + ) { utfall(ikkeFulleYtelser) { oppslag(prøvingsdato) { true } } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Medlemskap.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Medlemskap.kt deleted file mode 100644 index 1c2f248a0..000000000 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Medlemskap.kt +++ /dev/null @@ -1,3 +0,0 @@ -package no.nav.dagpenger.regel - -object Medlemskap diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Meldeplikt.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Meldeplikt.kt index fa17120bd..f2b7794de 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Meldeplikt.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Meldeplikt.kt @@ -14,7 +14,10 @@ object Meldeplikt { val registrertPåSøknadstidspunktet = Opplysningstype.somBoolsk("Registrert som arbeidssøker på søknadstidspunktet") val regelsett = - Regelsett("§ 4-8. Meldeplikt og møteplikt") { + Regelsett( + "4-8 Meldeplikt", + "§ 4-8. Meldeplikt og møteplikt", + ) { regel(registrertArbeidssøker) { innhentMed(prøvingsdato) } utfall(registrertPåSøknadstidspunktet) { erSann(registrertArbeidssøker) } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt index bb35f7093..150725b18 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt @@ -69,7 +69,10 @@ object Minsteinntekt { val minsteinntekt = Opplysningstype.somBoolsk("Krav til minsteinntekt".tekstId("opplysning.krav-til-minsteinntekt")) val regelsett = - Regelsett("§ 4-4. Krav til minsteinntekt") { + Regelsett( + "4-4 Minsteinntekt", + "§ 4-4. Krav til minsteinntekt", + ) { regel(maksPeriodeLengde) { oppslag(prøvingsdato) { 36 } } regel(førsteMånedAvOpptjeningsperiode) { trekkFraMånedTilFørste(sisteAvsluttendendeKalenderMåned, maksPeriodeLengde) } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt index c8320f78d..90e006706 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt @@ -20,7 +20,10 @@ object Opphold { val oppfyllerKravet = Opplysningstype.somBoolsk("Oppfyller kravet til opphold og medlemskap i Norge") val regelsett = - Regelsett("§ 4-2. Opphold i Norge") { + Regelsett( + "4-2 Opphold", + "§ 4-2. Opphold i Norge", + ) { regel(oppholdINorge) { oppslag(prøvingsdato) { true } } regel(unntakForOpphold) { oppslag(prøvingsdato) { false } } regel(oppfyllerKravetTilOpphold) { enAv(oppholdINorge, unntakForOpphold) } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opptjeningstid.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opptjeningstid.kt index 7ca1fa4d1..1aa22e251 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opptjeningstid.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opptjeningstid.kt @@ -24,7 +24,11 @@ object Opptjeningstid { val sisteAvsluttendendeKalenderMåned = Opplysningstype.somDato("Siste avsluttende kalendermåned".id(SisteAvsluttendeKalenderMåned)) val regelsett = - Regelsett("Opptjeningsperiode", RegelsettType.Fastsettelse) { + Regelsett( + "Opptjeningsperiode", + "A-opplysningsloven § 4. Frist for levering av opplysninger", + RegelsettType.Fastsettelse, + ) { regel(pliktigRapporteringsfrist) { oppslag(prøvingsdato) { Aordningen.rapporteringsfrist(it) } } regel(justertRapporteringsfrist) { førsteArbeidsdag(pliktigRapporteringsfrist) } regel(sisteAvsluttendendeKalenderMåned) { sisteAvsluttendeKalenderMåned(prøvingsdato, justertRapporteringsfrist) } diff --git "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/ReellArbeidss\303\270ker.kt" "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/ReellArbeidss\303\270ker.kt" index 8158fefa2..fc88b15bc 100644 --- "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/ReellArbeidss\303\270ker.kt" +++ "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/ReellArbeidss\303\270ker.kt" @@ -37,7 +37,10 @@ object ReellArbeidssøker { val kravTilArbeidssøker = Opplysningstype.somBoolsk("Krav til arbeidssøker") val regelsett = - Regelsett("§ 4-5. Reelle arbeidssøkere") { + Regelsett( + "4-5 Reell arbeidssøker", + "§ 4-5. Reelle arbeidssøkere", + ) { regel(kanJobbeDeltid) { innhentes } regel(kanJobbeHvorSomHelst) { innhentes } regel(erArbeidsfør) { innhentes } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Rettighetstype.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Rettighetstype.kt index 04e7e4363..a0e940a95 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Rettighetstype.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Rettighetstype.kt @@ -27,7 +27,11 @@ object Rettighetstype { val rettighetstype = Opplysningstype.somBoolsk("Rettighetstype".id("Rettighetstype")) val regelsett = - Regelsett("Rettighetstype", RegelsettType.Fastsettelse) { + Regelsett( + "Rettighetstype", + "Rettighetstype", + RegelsettType.Fastsettelse, + ) { regel(ordinærArbeid) { innhentes } regel(permittering) { innhentes } regel(lønnsgaranti) { innhentes } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/SamordingUtenforFolketrygden.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/SamordingUtenforFolketrygden.kt index e621e738d..3f70124a9 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/SamordingUtenforFolketrygden.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/SamordingUtenforFolketrygden.kt @@ -61,7 +61,10 @@ object SamordingUtenforFolketrygden { val dagsatsSamordnetUtenforFolketrygden = Opplysningstype.somBeløp("Dagsats uten barnetillegg samordnet") val regelsett = - Regelsett("§ 4-26. Samordning med ytelser utenfor folketrygden") { + Regelsett( + "4-26 Samordning utenfor folketrygden", + "§ 4-26. Samordning med ytelser utenfor folketrygden", + ) { regel(andreYtelser) { innhentes } regel(pensjonFraOffentligTjenestepensjonsordning) { oppslag(prøvingsdato) { false } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Samordning.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Samordning.kt index e81ec8d19..377b9d4f4 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Samordning.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Samordning.kt @@ -60,6 +60,7 @@ object Samordning { val regelsett = Regelsett( + "4-25 Samordning reduserte ytelser", "§ 4-25. Samordning med reduserte ytelser fra folketrygden, eller redusert avtalefestet pensjon", ) { regel(sykepenger) { innhentMed(prøvingsdato) } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt index 3815deacc..4cd82ab28 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt @@ -16,7 +16,10 @@ object StreikOgLockout { val ikkeStreikEllerLockout = Opplysningstype.somBoolsk("Er medlemmet ikke påvirket av streik eller lock-out?") val regelsett = - Regelsett("§ 4-22. Bortfall ved streik og lock-out").apply { + Regelsett( + "4-22 Bortfall ved streik og lock-out", + "§ 4-22. Bortfall ved streik og lock-out", + ).apply { regel(deltarIStreikOgLockout) { oppslag(prøvingsdato) { false } } regel(sammeBedriftOgPåvirket) { oppslag(prøvingsdato) { false } } utfall(ikkeStreikEllerLockout) { ingenAv(deltarIStreikOgLockout, sammeBedriftOgPåvirket) } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/TapAvArbeidsinntektOgArbeidstid.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/TapAvArbeidsinntektOgArbeidstid.kt index b64bcf143..2a41f6bf6 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/TapAvArbeidsinntektOgArbeidstid.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/TapAvArbeidsinntektOgArbeidstid.kt @@ -52,7 +52,10 @@ object TapAvArbeidsinntektOgArbeidstid { val kravTilTapAvArbeidsinntektOgArbeidstid = Opplysningstype.somBoolsk("Krav til tap av arbeidsinntekt og arbeidstid") val regelsett = - Regelsett("§ 4-3. Krav til tap av arbeidsinntekt og arbeidstid") { + Regelsett( + "4-3 Tap av arbeidsinntekt og arbeidstid", + "§ 4-3. Krav til tap av arbeidsinntekt og arbeidstid", + ) { regel(ønsketArbeidstid) { innhentMed(søknadIdOpplysningstype) } regel(tapAvArbeid) { oppslag(prøvingsdato) { true } } // TODO: Satt til true for testing av innvilgelse diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utdanning.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utdanning.kt index 320ea5200..52dfbf18c 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utdanning.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utdanning.kt @@ -43,7 +43,10 @@ object Utdanning { val kravTilUtdanning = Opplysningstype.somBoolsk("Krav til utdanning eller opplæring") val regelsett = - Regelsett("§ 4-6. Dagpenger under utdanning, opplæring, etablering av egen virksomhet m.v.") { + Regelsett( + "4-6 Utdanning og etablering", + "§ 4-6. Dagpenger under utdanning, opplæring, etablering av egen virksomhet m.v.", + ) { regel(tarUtdanning) { innhentMed() } // TODO: Legg til regler for å om kravet til utdanning skal vurderes diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utestengning.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utestengning.kt index 6ad3646c2..adf3ac154 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utestengning.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utestengning.kt @@ -11,7 +11,10 @@ object Utestengning { val oppfyllerKravetTilIkkeUtestengt = Opplysningstype.somBoolsk("Oppfyller krav til ikke utestengt") val regelsett = - Regelsett("§ 4-28. Utestengning") { + Regelsett( + "4-28 Utestengning", + "§ 4-28. Utestengning", + ) { regel(utestengt) { oppslag(prøvingsdato) { false } } utfall(oppfyllerKravetTilIkkeUtestengt) { ikke(utestengt) } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Verneplikt.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Verneplikt.kt index 13a11a173..a81fda593 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Verneplikt.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Verneplikt.kt @@ -14,7 +14,10 @@ object Verneplikt { Opplysningstype.somBoolsk("Har utført minst tre måneders militærtjeneste eller obligatorisk sivilforsvarstjeneste") val regelsett = - Regelsett("§ 4-19. Dagpenger etter avtjent verneplikt") { + Regelsett( + "4-19 Verneplikt", + "§ 4-19. Dagpenger etter avtjent verneplikt", + ) { regel(avtjentVerneplikt) { innhentMed(søknadIdOpplysningstype) } utfall(oppfyllerKravetTilVerneplikt) { erSann(avtjentVerneplikt) } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Virkningstidspunkt.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Virkningstidspunkt.kt index ad4bb6780..c02262dab 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Virkningstidspunkt.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Virkningstidspunkt.kt @@ -12,7 +12,10 @@ object Virkningstidspunkt { val dagensDato = Opplysningstype.somDato("Dagens dato") val regelsett = - Regelsett("Dagpengeforskriften § 3A-1. Søknadstidspunkt").apply { + Regelsett( + "3A-1 Søknadstidspunkt", + "Dagpengeforskriften § 3A-1. Søknadstidspunkt", + ).apply { regel(dagensDato) { finnDagensDato } regel(virkningstidspunkt) { fraOgMed(KravPåDagpenger.kravPåDagpenger) } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Dagpengegrunnlag.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Dagpengegrunnlag.kt index a2d3c5a49..11090ce2f 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Dagpengegrunnlag.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Dagpengegrunnlag.kt @@ -61,7 +61,11 @@ object Dagpengegrunnlag { internal val bruktBeregningsregel = Opplysningstype.somTekst("Brukt beregningsregel") val regelsett = - Regelsett("§ 4-11. Dagpengegrunnlag", Fastsettelse) { + Regelsett( + "4-11 Dagpengegrunnlag", + "§ 4-11. Dagpengegrunnlag", + Fastsettelse, + ) { regel(antallÅrI36Måneder) { oppslag(prøvingsdato) { 3.0 } } regel(faktorForMaksgrense) { oppslag(prøvingsdato) { 6.0 } } regel(maksgrenseForGrunnlag) { multiplikasjon(grunnbeløpForDagpengeGrunnlag, faktorForMaksgrense) } diff --git "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/DagpengenesSt\303\270rrelse.kt" "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/DagpengenesSt\303\270rrelse.kt" index eaea6a85e..615ff88a8 100644 --- "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/DagpengenesSt\303\270rrelse.kt" +++ "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/DagpengenesSt\303\270rrelse.kt" @@ -64,7 +64,11 @@ object DagpengenesStørrelse { val harSamordnet = Opplysningstype.somBoolsk("Har samordnet") val regelsett = - Regelsett("§ 4-12. Dagpengenes størrelse", Fastsettelse) { + Regelsett( + "4-12 Sats", + "§ 4-12. Dagpengenes størrelse", + Fastsettelse, + ) { regel(barn) { innhentMed(søknadIdOpplysningstype) } regel(antallBarn) { antallAv(barn) { kvalifiserer } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Dagpengeperiode.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Dagpengeperiode.kt index c531802f2..c6786d6c3 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Dagpengeperiode.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Dagpengeperiode.kt @@ -39,7 +39,11 @@ object Dagpengeperiode { private val ingenOrdinærPeriode = Opplysningstype.somHeltall("Stønadsuker når kravet til minste arbeidsinntekt ikke er oppfylt") val regelsett = - Regelsett("§ 4-15. Antall stønadsuker (stønadsperiode)", RegelsettType.Fastsettelse) { + Regelsett( + "4-15 Periode", + "§ 4-15. Antall stønadsuker (stønadsperiode)", + RegelsettType.Fastsettelse, + ) { regel(kortPeriode) { oppslag(prøvingsdato) { 52 } } regel(langPeriode) { oppslag(prøvingsdato) { 104 } } regel(terskelFaktor12) { oppslag(prøvingsdato) { 2.0 } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Egenandel.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Egenandel.kt index b850a29d3..e667e38bf 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Egenandel.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Egenandel.kt @@ -13,7 +13,11 @@ object Egenandel { private val faktor = Opplysningstype.somDesimaltall("Antall dagsats for egenandel") val regelsett = - Regelsett("§ 4-9. Egenandel", RegelsettType.Fastsettelse) { + Regelsett( + "4-9 Egenandel", + "§ 4-9. Egenandel", + RegelsettType.Fastsettelse, + ) { regel(faktor) { oppslag(prøvingsdato) { 3.0 } } regel(egenandel) { multiplikasjon(sats, faktor) } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/VernepliktFastsetting.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/VernepliktFastsetting.kt index 81eba2d7d..9b2d5bcad 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/VernepliktFastsetting.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/VernepliktFastsetting.kt @@ -27,7 +27,11 @@ object VernepliktFastsetting { val grunnlagForVernepliktErGunstigst = Opplysningstype.somBoolsk("Grunnlaget for verneplikt er høyere enn dagpengegrunnlaget") val regelsett = - Regelsett("§ 4-19. Dagpenger etter avtjent verneplikt", RegelsettType.Fastsettelse) { + Regelsett( + "4-19 Dagpenger ved verneplikt", + "§ 4-19. Dagpenger etter avtjent verneplikt", + RegelsettType.Fastsettelse, + ) { regel(antallG) { oppslag(prøvingsdato) { 3.0 } } regel(vernepliktGrunnlag) { multiplikasjon(grunnbeløpForDagpengeGrunnlag, antallG) } regel(vernepliktPeriode) { oppslag(prøvingsdato) { 26 } } diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt index cc1bd3ddf..ebe9e1b79 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt @@ -111,7 +111,8 @@ private fun Regelsett.tilRegelsettDTO( } return RegelsettDTO( - navn, + navn = navn, + hjemmel = hjemmel, avklaringer = egneAvklaringer.map { it.tilAvklaringDTO() }, opplysningIder = produserer.map { opplysning -> opplysning.id }, status = status, diff --git a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiTest.kt b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiTest.kt index 7c1b4d42a..e9c024c93 100644 --- a/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiTest.kt +++ b/mediator/src/test/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiTest.kt @@ -268,7 +268,7 @@ internal class BehandlingApiTest { behandlingDto.opplysninger.all { it.redigerbar } shouldBe false behandlingDto.avklaringer.shouldNotBeEmpty() - with(behandlingDto.vilkår.single { it.navn == "§ 4-4. Krav til minsteinntekt" }) { + with(behandlingDto.vilkår.single { it.navn == "4-4 Minsteinntekt" }) { avklaringer shouldHaveSize 1 avklaringer.single().kode shouldBe "InntektNesteKalendermåned" } diff --git a/openapi/src/main/resources/behandling-api.yaml b/openapi/src/main/resources/behandling-api.yaml index e737ad141..295cd381c 100644 --- a/openapi/src/main/resources/behandling-api.yaml +++ b/openapi/src/main/resources/behandling-api.yaml @@ -546,6 +546,10 @@ components: - opplysninger properties: navn: + description: Kort navn som beskriver regelsettet + type: string + hjemmel: + description: Hvilken hjemmel er regelsettet basert på type: string status: type: string diff --git a/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt b/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt index e15e431f0..13f6445e3 100644 --- a/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt +++ b/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt @@ -11,10 +11,12 @@ enum class RegelsettType { class Regelsett( val navn: String, + val hjemmel: String, val type: RegelsettType, block: Regelsett.() -> Unit = {}, ) { - constructor(navn: String, block: Regelsett.() -> Unit = {}) : this(navn, RegelsettType.Vilkår, block) + constructor(navn: String, block: Regelsett.() -> Unit = {}) : this(navn, navn, RegelsettType.Vilkår, block) + constructor(navn: String, hjemmel: String, block: Regelsett.() -> Unit = {}) : this(navn, hjemmel, RegelsettType.Vilkår, block) private val regler: MutableMap, TemporalCollection>> = mutableMapOf() private val avklaringer: MutableSet = mutableSetOf() From e57d98f4ed722c64c2db55b1dabebc984dcd1c03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Roaldseth?= Date: Tue, 14 Jan 2025 14:27:43 +0100 Subject: [PATCH 19/28] =?UTF-8?q?Bytt=20navn=20p=C3=A5=20opphold=20slik=20?= =?UTF-8?q?at=20vilk=C3=A5ret=20blir=20riktig=20inn=20i=20arena-sink?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tonje Mjøvik Myran Co-authored-by: Eivind Havnelid Røyrvik Co-authored-by: Sindre Sægrov Co-authored-by: Mette Wendy Lindberg Gulbrandsen Co-authored-by: Morten Tholander --- .../src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt | 4 ++-- .../kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt | 2 +- docs/regeltre-dagpenger.approved.md | 10 +++++----- .../regler/\302\247 4-2. Opphold i Norge.approved.md" | 8 ++++---- ...k inntekt skal innvilges.etterInntekt.approved.txt" | 4 ++-- ...pr\303\270vingsdato.innvilgelse-igjen.approved.txt" | 4 ++-- ...ng av pr\303\270vingsdato.innvilgelse.approved.txt" | 4 ++-- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt index 90e006706..3388d2e44 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt @@ -12,12 +12,12 @@ import no.nav.dagpenger.regel.Søknadstidspunkt.prøvingsdato object Opphold { var oppholdINorge = Opplysningstype.somBoolsk("Opphold i Norge".id("OppholdINorge")) var unntakForOpphold = Opplysningstype.somBoolsk("Oppfyller unntak for opphold i Norge") - val oppfyllerKravetTilOpphold = Opplysningstype.somBoolsk("Oppfyller kravet til opphold i Norge") + val oppfyllerKravetTilOpphold = Opplysningstype.somBoolsk("Oppfyller kravet til opphold i Norge eller unntak") val medlemFolketrygden = Opplysningstype.somBoolsk("Er personen medlem av folketrygden") val oppfyllerMedlemskap = Opplysningstype.somBoolsk("Oppfyller kravet til medlemskap") - val oppfyllerKravet = Opplysningstype.somBoolsk("Oppfyller kravet til opphold og medlemskap i Norge") + val oppfyllerKravet = Opplysningstype.somBoolsk("Oppfyller kravet til opphold i Norge") val regelsett = Regelsett( diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt index 4cd82ab28..5e710afc4 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt @@ -17,7 +17,7 @@ object StreikOgLockout { val regelsett = Regelsett( - "4-22 Bortfall ved streik og lock-out", + "4-22 Streik og lock-out", "§ 4-22. Bortfall ved streik og lock-out", ).apply { regel(deltarIStreikOgLockout) { oppslag(prøvingsdato) { false } } diff --git a/docs/regeltre-dagpenger.approved.md b/docs/regeltre-dagpenger.approved.md index 7d81c5ef3..6e2d6eb3b 100644 --- a/docs/regeltre-dagpenger.approved.md +++ b/docs/regeltre-dagpenger.approved.md @@ -131,7 +131,7 @@ graph RL CI["Krav på dagpenger"] -->|"Alle"| CF["Mottar ikke andre fulle ytelser"] CI["Krav på dagpenger"] -->|"Alle"| CJ["Registrert som arbeidssøker på søknadstidspunktet"] CI["Krav på dagpenger"] -->|"Alle"| CG["Oppfyller kravet til minsteinntekt eller verneplikt"] - CI["Krav på dagpenger"] -->|"Alle"| CK["Oppfyller kravet til opphold og medlemskap i Norge"] + CI["Krav på dagpenger"] -->|"Alle"| CK["Oppfyller kravet til opphold i Norge"] CI["Krav på dagpenger"] -->|"Alle"| CL["Krav til arbeidssøker"] CI["Krav på dagpenger"] -->|"Alle"| CM["Rettighetstype"] CI["Krav på dagpenger"] -->|"Alle"| CN["Utfall etter samordning"] @@ -165,12 +165,12 @@ graph RL CA["Krav til minsteinntekt"] -->|"EnAv"| DC["Arbeidsinntekt er over kravet for siste 36 mnd"] DD["Opphold i Norge"] -->|"Oppslag"| B["Prøvingsdato"] DE["Oppfyller unntak for opphold i Norge"] -->|"Oppslag"| B["Prøvingsdato"] - DF["Oppfyller kravet til opphold i Norge"] -->|"EnAv"| DD["Opphold i Norge"] - DF["Oppfyller kravet til opphold i Norge"] -->|"EnAv"| DE["Oppfyller unntak for opphold i Norge"] + DF["Oppfyller kravet til opphold i Norge eller unntak"] -->|"EnAv"| DD["Opphold i Norge"] + DF["Oppfyller kravet til opphold i Norge eller unntak"] -->|"EnAv"| DE["Oppfyller unntak for opphold i Norge"] DG["Er personen medlem av folketrygden"] -->|"Oppslag"| B["Prøvingsdato"] DH["Oppfyller kravet til medlemskap"] -->|"ErSann"| DG["Er personen medlem av folketrygden"] - CK["Oppfyller kravet til opphold og medlemskap i Norge"] -->|"Alle"| DF["Oppfyller kravet til opphold i Norge"] - CK["Oppfyller kravet til opphold og medlemskap i Norge"] -->|"Alle"| DH["Oppfyller kravet til medlemskap"] + CK["Oppfyller kravet til opphold i Norge"] -->|"Alle"| DF["Oppfyller kravet til opphold i Norge eller unntak"] + CK["Oppfyller kravet til opphold i Norge"] -->|"Alle"| DH["Oppfyller kravet til medlemskap"] DI["Lovpålagt rapporteringsfrist for A-ordningen"] -->|"Oppslag"| B["Prøvingsdato"] DJ["Arbeidsgivers rapporteringsfrist"] -->|"FørsteArbeidsdag"| DI["Lovpålagt rapporteringsfrist for A-ordningen"] CV["Siste avsluttende kalendermåned"] -->|"SisteavsluttendeKalenderMåned"| B["Prøvingsdato"] diff --git "a/docs/regler/\302\247 4-2. Opphold i Norge.approved.md" "b/docs/regler/\302\247 4-2. Opphold i Norge.approved.md" index 54ceffdb2..5156650e4 100644 --- "a/docs/regler/\302\247 4-2. Opphold i Norge.approved.md" +++ "b/docs/regler/\302\247 4-2. Opphold i Norge.approved.md" @@ -6,12 +6,12 @@ graph RL A["Opphold i Norge"] -->|"Oppslag"| B["Prøvingsdato"] C["Oppfyller unntak for opphold i Norge"] -->|"Oppslag"| B["Prøvingsdato"] - D["Oppfyller kravet til opphold i Norge"] -->|"EnAv"| A["Opphold i Norge"] - D["Oppfyller kravet til opphold i Norge"] -->|"EnAv"| C["Oppfyller unntak for opphold i Norge"] + D["Oppfyller kravet til opphold i Norge eller unntak"] -->|"EnAv"| A["Opphold i Norge"] + D["Oppfyller kravet til opphold i Norge eller unntak"] -->|"EnAv"| C["Oppfyller unntak for opphold i Norge"] E["Er personen medlem av folketrygden"] -->|"Oppslag"| B["Prøvingsdato"] F["Oppfyller kravet til medlemskap"] -->|"ErSann"| E["Er personen medlem av folketrygden"] - G["Oppfyller kravet til opphold og medlemskap i Norge"] -->|"Alle"| D["Oppfyller kravet til opphold i Norge"] - G["Oppfyller kravet til opphold og medlemskap i Norge"] -->|"Alle"| F["Oppfyller kravet til medlemskap"] + G["Oppfyller kravet til opphold i Norge"] -->|"Alle"| D["Oppfyller kravet til opphold i Norge eller unntak"] + G["Oppfyller kravet til opphold i Norge"] -->|"Alle"| F["Oppfyller kravet til medlemskap"] ``` ## Akseptansetester diff --git "a/mediator/src/test/resources/no/nav/dagpenger/behandling/PersonMediatorTest.S\303\270knad med nok inntekt skal innvilges.etterInntekt.approved.txt" "b/mediator/src/test/resources/no/nav/dagpenger/behandling/PersonMediatorTest.S\303\270knad med nok inntekt skal innvilges.etterInntekt.approved.txt" index 182d979da..fae032a33 100644 --- "a/mediator/src/test/resources/no/nav/dagpenger/behandling/PersonMediatorTest.S\303\270knad med nok inntekt skal innvilges.etterInntekt.approved.txt" +++ "b/mediator/src/test/resources/no/nav/dagpenger/behandling/PersonMediatorTest.S\303\270knad med nok inntekt skal innvilges.etterInntekt.approved.txt" @@ -81,7 +81,7 @@ Opplæringspenger dagsats Uføre dagsats Foreldrepenger dagsats Svangerskapspenger dagsats -Oppfyller kravet til opphold i Norge +Oppfyller kravet til opphold i Norge eller unntak Oppfyller kravet til medlemskap Er medlemmet ikke påvirket av streik eller lock-out? Ikke krav på lønn fra tidligere arbeidsgiver @@ -92,7 +92,7 @@ Samordnet fastsatt arbeidstid Beregningsregel: Tapt arbeidstid Godkjent unntak for utdanning eller opplæring? Oppfyller krav til ikke utestengt -Oppfyller kravet til opphold og medlemskap i Norge +Oppfyller kravet til opphold i Norge Krav til tap av arbeidsinntekt Grunnlag for verneplikt hvis kravet er oppfylt Inntektperiode 1 diff --git "a/mediator/src/test/resources/no/nav/dagpenger/behandling/PersonMediatorTest.endring av pr\303\270vingsdato.innvilgelse-igjen.approved.txt" "b/mediator/src/test/resources/no/nav/dagpenger/behandling/PersonMediatorTest.endring av pr\303\270vingsdato.innvilgelse-igjen.approved.txt" index a964568c9..f9f29a7a4 100644 --- "a/mediator/src/test/resources/no/nav/dagpenger/behandling/PersonMediatorTest.endring av pr\303\270vingsdato.innvilgelse-igjen.approved.txt" +++ "b/mediator/src/test/resources/no/nav/dagpenger/behandling/PersonMediatorTest.endring av pr\303\270vingsdato.innvilgelse-igjen.approved.txt" @@ -103,7 +103,7 @@ Dato søker når maks alder Arbeidsgivers rapporteringsfrist Inntektskrav for siste 12 mnd Inntektskrav for siste 36 mnd -Oppfyller kravet til opphold i Norge +Oppfyller kravet til opphold i Norge eller unntak Oppfyller kravet til medlemskap Oppfyller kravet til heltid- og deltidsarbeid Oppfyller kravet til mobilitet @@ -126,7 +126,7 @@ Terskel for 36 måneder Har barnetillegg Siste mulige dag bruker kan oppfylle alderskrav Siste avsluttende kalendermåned -Oppfyller kravet til opphold og medlemskap i Norge +Oppfyller kravet til opphold i Norge Krav til arbeidssøker Oppfyller kravet på unntak for utdanning eller opplæring Oppfyller kravet til alder diff --git "a/mediator/src/test/resources/no/nav/dagpenger/behandling/PersonMediatorTest.endring av pr\303\270vingsdato.innvilgelse.approved.txt" "b/mediator/src/test/resources/no/nav/dagpenger/behandling/PersonMediatorTest.endring av pr\303\270vingsdato.innvilgelse.approved.txt" index 182d979da..fae032a33 100644 --- "a/mediator/src/test/resources/no/nav/dagpenger/behandling/PersonMediatorTest.endring av pr\303\270vingsdato.innvilgelse.approved.txt" +++ "b/mediator/src/test/resources/no/nav/dagpenger/behandling/PersonMediatorTest.endring av pr\303\270vingsdato.innvilgelse.approved.txt" @@ -81,7 +81,7 @@ Opplæringspenger dagsats Uføre dagsats Foreldrepenger dagsats Svangerskapspenger dagsats -Oppfyller kravet til opphold i Norge +Oppfyller kravet til opphold i Norge eller unntak Oppfyller kravet til medlemskap Er medlemmet ikke påvirket av streik eller lock-out? Ikke krav på lønn fra tidligere arbeidsgiver @@ -92,7 +92,7 @@ Samordnet fastsatt arbeidstid Beregningsregel: Tapt arbeidstid Godkjent unntak for utdanning eller opplæring? Oppfyller krav til ikke utestengt -Oppfyller kravet til opphold og medlemskap i Norge +Oppfyller kravet til opphold i Norge Krav til tap av arbeidsinntekt Grunnlag for verneplikt hvis kravet er oppfylt Inntektperiode 1 From 17af7b189217dfce226047ce422c2715f573492e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Andr=C3=A9=20Lund?= Date: Tue, 14 Jan 2025 14:43:21 +0100 Subject: [PATCH 20/28] Skru av slettejobber. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Richard André Martinsen --- .../behandling/mediator/jobber/SlettFjernetOpplysninger.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt index 53025cf07..c953dcb83 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt @@ -18,7 +18,7 @@ internal object SlettFjernetOpplysninger { period = 15.minutes.inWholeMilliseconds, action = { try { - if (System.getenv("NAIS_CLUSTER_NAME") == "dev-gcp") { + if (System.getenv("NAIS_CLUSTER_NAME") == "skrudd-av") { vaktmesterRepository.slettOpplysninger(antall = 1) } else { logger.info { "Sletting av fjernet opplysninger er skrudd av" } From fad73068d4dcca01eca85c8339d0370e86e96819 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Roaldseth?= Date: Tue, 14 Jan 2025 15:16:15 +0100 Subject: [PATCH 21/28] =?UTF-8?q?Lag=20st=C3=B8tte=20for=20hjemmel=20med?= =?UTF-8?q?=20og=20uten=20kortnavn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Tonje Mjøvik Myran Co-authored-by: Eivind Havnelid Røyrvik Co-authored-by: Sindre Sægrov Co-authored-by: Mette Wendy Lindberg Gulbrandsen Co-authored-by: Morten Tholander --- .../no/nav/dagpenger/regel/Alderskrav.kt | 4 +- .../no/nav/dagpenger/regel/FulleYtelser.kt | 8 +++- .../no/nav/dagpenger/regel/Lovkilder.kt | 7 ++++ .../no/nav/dagpenger/regel/Meldeplikt.kt | 3 +- .../no/nav/dagpenger/regel/Minsteinntekt.kt | 3 +- .../kotlin/no/nav/dagpenger/regel/Opphold.kt | 3 +- .../no/nav/dagpenger/regel/Opptjeningstid.kt | 3 +- .../regel/ReellArbeidss\303\270ker.kt" | 3 +- .../nav/dagpenger/regel/RegelverkDagpenger.kt | 0 .../no/nav/dagpenger/regel/Rettighetstype.kt | 3 +- .../regel/SamordingUtenforFolketrygden.kt | 3 +- .../no/nav/dagpenger/regel/Samordning.kt | 11 +++--- .../no/nav/dagpenger/regel/StreikOgLockout.kt | 3 +- .../regel/TapAvArbeidsinntektOgArbeidstid.kt | 3 +- .../no/nav/dagpenger/regel/Utdanning.kt | 8 +++- .../no/nav/dagpenger/regel/Utestengning.kt | 3 +- .../no/nav/dagpenger/regel/Verneplikt.kt | 3 +- .../nav/dagpenger/regel/Virkningstidspunkt.kt | 3 +- .../regel/fastsetting/Dagpengegrunnlag.kt | 4 +- .../DagpengenesSt\303\270rrelse.kt" | 4 +- .../regel/fastsetting/Dagpengeperiode.kt | 4 +- .../dagpenger/regel/fastsetting/Egenandel.kt | 4 +- .../fastsetting/VernepliktFastsetting.kt | 4 +- .../mediator/api/BehandlingApiMapper.kt | 16 ++++++-- .../src/main/resources/behandling-api.yaml | 31 ++++++++++++++- .../no/nav/dagpenger/opplysning/Regelsett.kt | 38 ++++++++++++++++--- 26 files changed, 124 insertions(+), 55 deletions(-) create mode 100644 dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Lovkilder.kt rename "dagpenger/src/main/kotlin/no/nav/dagpenger/regel/S\303\270knadInnsendtRegelsett.kt" => dagpenger/src/main/kotlin/no/nav/dagpenger/regel/RegelverkDagpenger.kt (100%) diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Alderskrav.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Alderskrav.kt index 1fd967129..8a1750e35 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Alderskrav.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Alderskrav.kt @@ -9,6 +9,7 @@ import no.nav.dagpenger.opplysning.regel.dato.leggTilÅr import no.nav.dagpenger.opplysning.regel.dato.sisteDagIMåned import no.nav.dagpenger.opplysning.regel.innhentes import no.nav.dagpenger.opplysning.regel.oppslag +import no.nav.dagpenger.regel.Alderskrav.sisteDagIMåned import no.nav.dagpenger.regel.Søknadstidspunkt.prøvingsdato import no.nav.dagpenger.regel.Søknadstidspunkt.søknadsdato @@ -25,8 +26,7 @@ object Alderskrav { val regelsett = Regelsett( - "4-23 Alder", - "§ 4-23. Bortfall på grunn av alder", + folketrygden.hjemmel(4, 23, "Bortfall på grunn av alder", "4-23 Alder"), ) { regel(fødselsdato) { innhentes } regel(aldersgrense) { oppslag(virkningsdato) { 67 } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/FulleYtelser.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/FulleYtelser.kt index 45fe17297..4e1ef932d 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/FulleYtelser.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/FulleYtelser.kt @@ -13,8 +13,12 @@ object FulleYtelser { val regelsett = Regelsett( - "4-24 Fulle ytelser", - "§ 4-24. Medlem som har fulle ytelser etter folketrygdloven eller avtalefestet pensjon", + folketrygden.hjemmel( + 4, + 24, + "Medlem som har fulle ytelser etter folketrygdloven eller avtalefestet pensjon", + "4-24 Fulle ytelser", + ), ) { utfall(ikkeFulleYtelser) { oppslag(prøvingsdato) { true } } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Lovkilder.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Lovkilder.kt new file mode 100644 index 000000000..acf4e652b --- /dev/null +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Lovkilder.kt @@ -0,0 +1,7 @@ +package no.nav.dagpenger.regel + +import no.nav.dagpenger.opplysning.Lovkilde + +val aOpplynsingsLoven = Lovkilde("A-opplysningsloven", "a-opplysningsloven") +val forskriftTilFolketrygden = Lovkilde("Forskrift til Folketrygdloven", "ftrl") +val folketrygden = Lovkilde("Folketrygdloven", "ftrl") diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Meldeplikt.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Meldeplikt.kt index f2b7794de..247169a79 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Meldeplikt.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Meldeplikt.kt @@ -15,8 +15,7 @@ object Meldeplikt { val regelsett = Regelsett( - "4-8 Meldeplikt", - "§ 4-8. Meldeplikt og møteplikt", + folketrygden.hjemmel(4, 8, "Meldeplikt og møteplikt", "4-8 Meldeplikt"), ) { regel(registrertArbeidssøker) { innhentMed(prøvingsdato) } utfall(registrertPåSøknadstidspunktet) { erSann(registrertArbeidssøker) } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt index 150725b18..ebfaeab2e 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Minsteinntekt.kt @@ -70,8 +70,7 @@ object Minsteinntekt { val regelsett = Regelsett( - "4-4 Minsteinntekt", - "§ 4-4. Krav til minsteinntekt", + folketrygden.hjemmel(4, 4, "Krav til minsteinntekt", "4-4 Minsteinntekt"), ) { regel(maksPeriodeLengde) { oppslag(prøvingsdato) { 36 } } regel(førsteMånedAvOpptjeningsperiode) { trekkFraMånedTilFørste(sisteAvsluttendendeKalenderMåned, maksPeriodeLengde) } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt index 3388d2e44..b4d0f5f6e 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opphold.kt @@ -21,8 +21,7 @@ object Opphold { val regelsett = Regelsett( - "4-2 Opphold", - "§ 4-2. Opphold i Norge", + folketrygden.hjemmel(4, 2, "Opphold i Norge", "4-2 Opphold"), ) { regel(oppholdINorge) { oppslag(prøvingsdato) { true } } regel(unntakForOpphold) { oppslag(prøvingsdato) { false } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opptjeningstid.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opptjeningstid.kt index 1aa22e251..118db96de 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opptjeningstid.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Opptjeningstid.kt @@ -25,8 +25,7 @@ object Opptjeningstid { val regelsett = Regelsett( - "Opptjeningsperiode", - "A-opplysningsloven § 4. Frist for levering av opplysninger", + aOpplynsingsLoven.hjemmel(1, 2, "Frist for levering av opplysninger", "Opptjeningsperiode"), RegelsettType.Fastsettelse, ) { regel(pliktigRapporteringsfrist) { oppslag(prøvingsdato) { Aordningen.rapporteringsfrist(it) } } diff --git "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/ReellArbeidss\303\270ker.kt" "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/ReellArbeidss\303\270ker.kt" index fc88b15bc..56ea741c5 100644 --- "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/ReellArbeidss\303\270ker.kt" +++ "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/ReellArbeidss\303\270ker.kt" @@ -38,8 +38,7 @@ object ReellArbeidssøker { val regelsett = Regelsett( - "4-5 Reell arbeidssøker", - "§ 4-5. Reelle arbeidssøkere", + folketrygden.hjemmel(4, 5, "Reelle arbeidssøkere", "4-5 Reell arbeidssøker"), ) { regel(kanJobbeDeltid) { innhentes } regel(kanJobbeHvorSomHelst) { innhentes } diff --git "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/S\303\270knadInnsendtRegelsett.kt" b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/RegelverkDagpenger.kt similarity index 100% rename from "dagpenger/src/main/kotlin/no/nav/dagpenger/regel/S\303\270knadInnsendtRegelsett.kt" rename to dagpenger/src/main/kotlin/no/nav/dagpenger/regel/RegelverkDagpenger.kt diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Rettighetstype.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Rettighetstype.kt index a0e940a95..34e6804b8 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Rettighetstype.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Rettighetstype.kt @@ -28,8 +28,7 @@ object Rettighetstype { val regelsett = Regelsett( - "Rettighetstype", - "Rettighetstype", + folketrygden.hjemmel(0, 0, "Rettighetstype", "Rettighetstype"), RegelsettType.Fastsettelse, ) { regel(ordinærArbeid) { innhentes } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/SamordingUtenforFolketrygden.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/SamordingUtenforFolketrygden.kt index 3f70124a9..a0ae45694 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/SamordingUtenforFolketrygden.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/SamordingUtenforFolketrygden.kt @@ -62,8 +62,7 @@ object SamordingUtenforFolketrygden { val regelsett = Regelsett( - "4-26 Samordning utenfor folketrygden", - "§ 4-26. Samordning med ytelser utenfor folketrygden", + folketrygden.hjemmel(4, 26, "Samordning med ytelser utenfor folketrygden", "4-26 Samordning utenfor folketrygden"), ) { regel(andreYtelser) { innhentes } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Samordning.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Samordning.kt index 377b9d4f4..2ad33a439 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Samordning.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Samordning.kt @@ -19,9 +19,6 @@ import no.nav.dagpenger.regel.Behov.Pleiepenger import no.nav.dagpenger.regel.Behov.Svangerskapspenger import no.nav.dagpenger.regel.Behov.Sykepenger import no.nav.dagpenger.regel.Behov.Uføre -import no.nav.dagpenger.regel.Samordning.samordnetDagsats -import no.nav.dagpenger.regel.Samordning.skalSamordnes -import no.nav.dagpenger.regel.Samordning.utfallEtterSamordning import no.nav.dagpenger.regel.Søknadstidspunkt.prøvingsdato import no.nav.dagpenger.regel.TapAvArbeidsinntektOgArbeidstid.beregnetArbeidstid import no.nav.dagpenger.regel.fastsetting.DagpengenesStørrelse.dagsatsEtterNittiProsent @@ -60,8 +57,12 @@ object Samordning { val regelsett = Regelsett( - "4-25 Samordning reduserte ytelser", - "§ 4-25. Samordning med reduserte ytelser fra folketrygden, eller redusert avtalefestet pensjon", + folketrygden.hjemmel( + kapittel = 4, + paragraf = 25, + tittel = "Samordning med reduserte ytelser fra folketrygden, eller redusert avtalefestet pensjon", + kortnavn = "4-25 Samordning reduserte ytelser", + ), ) { regel(sykepenger) { innhentMed(prøvingsdato) } regel(pleiepenger) { innhentMed(prøvingsdato) } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt index 5e710afc4..58c9ab740 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/StreikOgLockout.kt @@ -17,8 +17,7 @@ object StreikOgLockout { val regelsett = Regelsett( - "4-22 Streik og lock-out", - "§ 4-22. Bortfall ved streik og lock-out", + folketrygden.hjemmel(4, 22, "Bortfall ved streik og lock-out", "4-22 Streik og lock-out"), ).apply { regel(deltarIStreikOgLockout) { oppslag(prøvingsdato) { false } } regel(sammeBedriftOgPåvirket) { oppslag(prøvingsdato) { false } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/TapAvArbeidsinntektOgArbeidstid.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/TapAvArbeidsinntektOgArbeidstid.kt index 2a41f6bf6..bd88e2644 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/TapAvArbeidsinntektOgArbeidstid.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/TapAvArbeidsinntektOgArbeidstid.kt @@ -53,8 +53,7 @@ object TapAvArbeidsinntektOgArbeidstid { val regelsett = Regelsett( - "4-3 Tap av arbeidsinntekt og arbeidstid", - "§ 4-3. Krav til tap av arbeidsinntekt og arbeidstid", + folketrygden.hjemmel(4, 3, "Krav til tap av arbeidsinntekt og arbeidstid", "4-3 Tap av arbeidsinntekt og arbeidstid"), ) { regel(ønsketArbeidstid) { innhentMed(søknadIdOpplysningstype) } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utdanning.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utdanning.kt index 52dfbf18c..302cd7312 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utdanning.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utdanning.kt @@ -44,8 +44,12 @@ object Utdanning { val regelsett = Regelsett( - "4-6 Utdanning og etablering", - "§ 4-6. Dagpenger under utdanning, opplæring, etablering av egen virksomhet m.v.", + folketrygden.hjemmel( + kapittel = 4, + paragraf = 6, + tittel = "Dagpenger under utdanning, opplæring, etablering av egen virksomhet m.v", + kortnavn = "4-6 Utdanning og etablering", + ), ) { regel(tarUtdanning) { innhentMed() } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utestengning.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utestengning.kt index adf3ac154..d8fa0e13e 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utestengning.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Utestengning.kt @@ -12,8 +12,7 @@ object Utestengning { val regelsett = Regelsett( - "4-28 Utestengning", - "§ 4-28. Utestengning", + folketrygden.hjemmel(4, 28, "Utestengning", "4-28 Utestengning"), ) { regel(utestengt) { oppslag(prøvingsdato) { false } } utfall(oppfyllerKravetTilIkkeUtestengt) { ikke(utestengt) } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Verneplikt.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Verneplikt.kt index a81fda593..6055feff1 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Verneplikt.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Verneplikt.kt @@ -15,8 +15,7 @@ object Verneplikt { val regelsett = Regelsett( - "4-19 Verneplikt", - "§ 4-19. Dagpenger etter avtjent verneplikt", + folketrygden.hjemmel(4, 19, "Dagpenger etter avtjent verneplikt", "4-19 Verneplikt"), ) { regel(avtjentVerneplikt) { innhentMed(søknadIdOpplysningstype) } utfall(oppfyllerKravetTilVerneplikt) { erSann(avtjentVerneplikt) } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Virkningstidspunkt.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Virkningstidspunkt.kt index c02262dab..f3bbe36cd 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Virkningstidspunkt.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/Virkningstidspunkt.kt @@ -13,8 +13,7 @@ object Virkningstidspunkt { val regelsett = Regelsett( - "3A-1 Søknadstidspunkt", - "Dagpengeforskriften § 3A-1. Søknadstidspunkt", + forskriftTilFolketrygden.hjemmel(3, 1, "Søknadstidspunkt", "§3A-1 Søknadstidspunkt"), ).apply { regel(dagensDato) { finnDagensDato } regel(virkningstidspunkt) { fraOgMed(KravPåDagpenger.kravPåDagpenger) } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Dagpengegrunnlag.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Dagpengegrunnlag.kt index 11090ce2f..1ea1ddbbb 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Dagpengegrunnlag.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Dagpengegrunnlag.kt @@ -24,6 +24,7 @@ import no.nav.dagpenger.opplysning.verdier.Beløp import no.nav.dagpenger.regel.Minsteinntekt.inntektFraSkatt import no.nav.dagpenger.regel.Søknadstidspunkt.prøvingsdato import no.nav.dagpenger.regel.fastsetting.VernepliktFastsetting.grunnlagHvisVerneplikt +import no.nav.dagpenger.regel.folketrygden import java.time.LocalDate object Dagpengegrunnlag { @@ -62,8 +63,7 @@ object Dagpengegrunnlag { val regelsett = Regelsett( - "4-11 Dagpengegrunnlag", - "§ 4-11. Dagpengegrunnlag", + folketrygden.hjemmel(4, 11, "Dagpengegrunnlag", "4-11 Dagpengegrunnlag"), Fastsettelse, ) { regel(antallÅrI36Måneder) { oppslag(prøvingsdato) { 3.0 } } diff --git "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/DagpengenesSt\303\270rrelse.kt" "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/DagpengenesSt\303\270rrelse.kt" index 615ff88a8..110b23030 100644 --- "a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/DagpengenesSt\303\270rrelse.kt" +++ "b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/DagpengenesSt\303\270rrelse.kt" @@ -24,6 +24,7 @@ import no.nav.dagpenger.regel.SamordingUtenforFolketrygden.dagsatsSamordnetUtenf import no.nav.dagpenger.regel.Søknadstidspunkt.prøvingsdato import no.nav.dagpenger.regel.Søknadstidspunkt.søknadIdOpplysningstype import no.nav.dagpenger.regel.fastsetting.Dagpengegrunnlag.grunnlag +import no.nav.dagpenger.regel.folketrygden import java.math.BigDecimal import java.time.LocalDate @@ -65,8 +66,7 @@ object DagpengenesStørrelse { val regelsett = Regelsett( - "4-12 Sats", - "§ 4-12. Dagpengenes størrelse", + folketrygden.hjemmel(4, 12, "Dagpengenes størrelse", "4-12 Sats og barnetillegg"), Fastsettelse, ) { regel(barn) { innhentMed(søknadIdOpplysningstype) } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Dagpengeperiode.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Dagpengeperiode.kt index c6786d6c3..4167d8ac4 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Dagpengeperiode.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Dagpengeperiode.kt @@ -12,6 +12,7 @@ import no.nav.dagpenger.opplysning.regel.størreEnnEllerLik import no.nav.dagpenger.regel.Minsteinntekt import no.nav.dagpenger.regel.Søknadstidspunkt.prøvingsdato import no.nav.dagpenger.regel.fastsetting.Dagpengeperiode.ordinærPeriode +import no.nav.dagpenger.regel.folketrygden object Dagpengeperiode { val antallStønadsuker = Opplysningstype.somHeltall("Antall stønadsuker") @@ -40,8 +41,7 @@ object Dagpengeperiode { val regelsett = Regelsett( - "4-15 Periode", - "§ 4-15. Antall stønadsuker (stønadsperiode)", + folketrygden.hjemmel(4, 15, "Antall stønadsuker (stønadsperiode)", "4-15 Periode"), RegelsettType.Fastsettelse, ) { regel(kortPeriode) { oppslag(prøvingsdato) { 52 } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Egenandel.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Egenandel.kt index e667e38bf..66cd42db3 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Egenandel.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/Egenandel.kt @@ -6,6 +6,7 @@ import no.nav.dagpenger.opplysning.RegelsettType import no.nav.dagpenger.opplysning.regel.multiplikasjon import no.nav.dagpenger.opplysning.regel.oppslag import no.nav.dagpenger.regel.Søknadstidspunkt.prøvingsdato +import no.nav.dagpenger.regel.folketrygden object Egenandel { val egenandel = Opplysningstype.somBeløp("Egenandel") @@ -14,8 +15,7 @@ object Egenandel { val regelsett = Regelsett( - "4-9 Egenandel", - "§ 4-9. Egenandel", + folketrygden.hjemmel(4, 9, "Egenandel", "4-9 Egenandel"), RegelsettType.Fastsettelse, ) { regel(faktor) { oppslag(prøvingsdato) { 3.0 } } diff --git a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/VernepliktFastsetting.kt b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/VernepliktFastsetting.kt index 9b2d5bcad..79b1a50f5 100644 --- a/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/VernepliktFastsetting.kt +++ b/dagpenger/src/main/kotlin/no/nav/dagpenger/regel/fastsetting/VernepliktFastsetting.kt @@ -16,6 +16,7 @@ import no.nav.dagpenger.regel.fastsetting.VernepliktFastsetting.grunnlagForVerne import no.nav.dagpenger.regel.fastsetting.VernepliktFastsetting.vernepliktFastsattVanligArbeidstid import no.nav.dagpenger.regel.fastsetting.VernepliktFastsetting.vernepliktGrunnlag import no.nav.dagpenger.regel.fastsetting.VernepliktFastsetting.vernepliktPeriode +import no.nav.dagpenger.regel.folketrygden object VernepliktFastsetting { private val antallG = Opplysningstype.somDesimaltall("Antall G som gis som grunnlag ved verneplikt") @@ -28,8 +29,7 @@ object VernepliktFastsetting { val regelsett = Regelsett( - "4-19 Dagpenger ved verneplikt", - "§ 4-19. Dagpenger etter avtjent verneplikt", + folketrygden.hjemmel(4, 19, "Dagpenger etter avtjent verneplikt", "4-19 Dagpenger ved verneplikt"), RegelsettType.Fastsettelse, ) { regel(antallG) { oppslag(prøvingsdato) { 3.0 } } diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt index ebe9e1b79..118f7bba9 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt @@ -7,6 +7,8 @@ import no.nav.dagpenger.behandling.api.models.AvklaringDTO import no.nav.dagpenger.behandling.api.models.BehandlingDTO import no.nav.dagpenger.behandling.api.models.BehandlingOpplysningerDTO import no.nav.dagpenger.behandling.api.models.DataTypeDTO +import no.nav.dagpenger.behandling.api.models.HjemmelDTO +import no.nav.dagpenger.behandling.api.models.LovkildeDTO import no.nav.dagpenger.behandling.api.models.OpplysningDTO import no.nav.dagpenger.behandling.api.models.OpplysningskildeDTO import no.nav.dagpenger.behandling.api.models.RegelDTO @@ -83,12 +85,12 @@ internal fun Behandling.tilBehandlingDTO(): BehandlingDTO = behandler.regelverk .regelsettAvType(RegelsettType.Vilkår) .map { it.tilRegelsettDTO(opplysninger, avklaringer) } - .sortedBy { it.navn }, + .sortedBy { it.hjemmel.kapittel }, fastsettelser = behandler.regelverk .regelsettAvType(RegelsettType.Fastsettelse) .map { it.tilRegelsettDTO(opplysninger, avklaringer) } - .sortedBy { it.navn }, + .sortedBy { it.hjemmel.kapittel }, kreverTotrinnskontroll = this.kreverTotrinnskontroll(), avklaringer = generelleAvklaringer.map { it.tilAvklaringDTO() }, opplysninger = opplysninger.map { it.tilOpplysningDTO() }, @@ -111,8 +113,14 @@ private fun Regelsett.tilRegelsettDTO( } return RegelsettDTO( - navn = navn, - hjemmel = hjemmel, + navn = hjemmel.kortnavn, + hjemmel = + HjemmelDTO( + kilde = LovkildeDTO(hjemmel.kilde.navn, hjemmel.kilde.kortnavn), + kapittel = hjemmel.kapittel.toString(), + paragraf = hjemmel.paragraf.toString(), + tittel = hjemmel.toString(), + ), avklaringer = egneAvklaringer.map { it.tilAvklaringDTO() }, opplysningIder = produserer.map { opplysning -> opplysning.id }, status = status, diff --git a/openapi/src/main/resources/behandling-api.yaml b/openapi/src/main/resources/behandling-api.yaml index 295cd381c..ca1e3f300 100644 --- a/openapi/src/main/resources/behandling-api.yaml +++ b/openapi/src/main/resources/behandling-api.yaml @@ -542,6 +542,7 @@ components: type: object required: - navn + - hjemmel - avklaringer - opplysninger properties: @@ -550,7 +551,7 @@ components: type: string hjemmel: description: Hvilken hjemmel er regelsettet basert på - type: string + $ref: '#/components/schemas/Hjemmel' status: type: string enum: [ "Oppfylt", "HarAvklaring", "IkkeOppfylt", "Info" ] @@ -564,6 +565,34 @@ components: items: $ref: '#/components/schemas/OpplysningsId' + Hjemmel: + type: object + required: + - kilde + - kapittel + - paragraf + properties: + kilde: + description: Lov, forskrift, eller rundskriv + $ref: '#/components/schemas/Lovkilde' + kapittel: + type: string + paragraf: + type: string + tittel: + type: string + + Lovkilde: + type: object + required: + - navn + - kortnavn + properties: + navn: + type: string + kortnavn: + type: string + Opplysning: type: object required: diff --git a/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt b/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt index 13f6445e3..b675f8346 100644 --- a/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt +++ b/opplysninger/src/main/kotlin/no/nav/dagpenger/opplysning/Regelsett.kt @@ -9,19 +9,47 @@ enum class RegelsettType { Fastsettelse, } -class Regelsett( +data class Lovkilde( val navn: String, - val hjemmel: String, + val kortnavn: String, +) { + fun hjemmel( + kapittel: Int, + paragraf: Int, + tittel: String, + kortnavn: String, + ) = Hjemmel(this, kapittel, paragraf, tittel, kortnavn) + + override fun toString() = kortnavn +} + +data class Hjemmel( + val kilde: Lovkilde, + val kapittel: Int, + val paragraf: Int, + val tittel: String, + val kortnavn: String, +) { + override fun toString() = "$kilde § $kapittel-$paragraf. $tittel" +} + +class Regelsett( + val hjemmel: Hjemmel, val type: RegelsettType, block: Regelsett.() -> Unit = {}, ) { - constructor(navn: String, block: Regelsett.() -> Unit = {}) : this(navn, navn, RegelsettType.Vilkår, block) - constructor(navn: String, hjemmel: String, block: Regelsett.() -> Unit = {}) : this(navn, hjemmel, RegelsettType.Vilkår, block) + constructor( + navn: String, + block: Regelsett.() -> Unit = {}, + ) : this(Hjemmel(Lovkilde(navn, navn), 0, 0, navn, navn), RegelsettType.Vilkår, block) + + constructor(hjemmel: Hjemmel, block: Regelsett.() -> Unit = {}) : this(hjemmel, RegelsettType.Vilkår, block) private val regler: MutableMap, TemporalCollection>> = mutableMapOf() private val avklaringer: MutableSet = mutableSetOf() private var _utfall: Opplysningstype? = null val utfall get() = _utfall + val navn = hjemmel.kortnavn init { block() @@ -72,5 +100,5 @@ class Regelsett( .map { it.produserer } } - override fun toString() = "Regelsett(navn=$navn)" + override fun toString() = "Regelsett(navn=${hjemmel.kortnavn})" } From 233877aef67a88c95e4b91bf80f2d0eb1cca9977 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Andr=C3=A9=20Lund?= Date: Tue, 14 Jan 2025 15:27:51 +0100 Subject: [PATCH 22/28] =?UTF-8?q?Skru=20p=C3=A5=20slettejobb=20i=20dev=20f?= =?UTF-8?q?or=20=C3=A5=20teste.=20Filtrerer=20ut=20behandling=20som=20ikke?= =?UTF-8?q?=20lar=20seg=20slette,=20mistenker=20at=20denne=20feilen=20er?= =?UTF-8?q?=20fikser=20i=20https://github.com/navikt/dp-behandling/commit/?= =?UTF-8?q?f357ec1e6da3ebbc00e64edca1873caa4ff1cb69?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jobber/SlettFjernetOpplysninger.kt | 2 +- .../repository/VaktmesterPostgresRepo.kt | 25 ++++++++++--------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt index c953dcb83..53025cf07 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt @@ -18,7 +18,7 @@ internal object SlettFjernetOpplysninger { period = 15.minutes.inWholeMilliseconds, action = { try { - if (System.getenv("NAIS_CLUSTER_NAME") == "skrudd-av") { + if (System.getenv("NAIS_CLUSTER_NAME") == "dev-gcp") { vaktmesterRepository.slettOpplysninger(antall = 1) } else { logger.info { "Sletting av fjernet opplysninger er skrudd av" } diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt index 1bed89821..aa169b9b4 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt @@ -80,18 +80,19 @@ internal class VaktmesterPostgresRepo { """.trimIndent() val opplysninger = - kandidater.onEach { kandidat -> - session.run( - queryOf( - query, - mapOf("opplysninger_id" to kandidat.opplysningerId), - ).map { row -> - kandidat.leggTil( - row.uuid("id"), - ) - }.asList, - ) - } + kandidater + .onEach { kandidat -> + session.run( + queryOf( + query, + mapOf("opplysninger_id" to kandidat.opplysningerId), + ).map { row -> + kandidat.leggTil( + row.uuid("id"), + ) + }.asList, + ) + }.filterNot { it.behandlingId.toString() == "01932f46-c4d3-755e-a4da-c572945a93b4" } logger.info { "Fant ${kandidater.size} opplysningsett som inneholder opplysninger som er fjernet og som skal slettes" } return opplysninger } From 957357817cba17082ce01adef525ad60d2fde434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Roaldseth?= Date: Tue, 14 Jan 2025 15:33:24 +0100 Subject: [PATCH 23/28] Sorter regelsett etter paragraf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sindre Sægrov Co-authored-by: Morten Tholander --- .../dagpenger/behandling/mediator/api/BehandlingApiMapper.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt index 118f7bba9..5bfcf8cac 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt @@ -85,12 +85,12 @@ internal fun Behandling.tilBehandlingDTO(): BehandlingDTO = behandler.regelverk .regelsettAvType(RegelsettType.Vilkår) .map { it.tilRegelsettDTO(opplysninger, avklaringer) } - .sortedBy { it.hjemmel.kapittel }, + .sortedBy { it.hjemmel.paragraf }, fastsettelser = behandler.regelverk .regelsettAvType(RegelsettType.Fastsettelse) .map { it.tilRegelsettDTO(opplysninger, avklaringer) } - .sortedBy { it.hjemmel.kapittel }, + .sortedBy { it.hjemmel.paragraf }, kreverTotrinnskontroll = this.kreverTotrinnskontroll(), avklaringer = generelleAvklaringer.map { it.tilAvklaringDTO() }, opplysninger = opplysninger.map { it.tilOpplysningDTO() }, From 337229b49f559e4413972ac19afd3a39bcafcd3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Roaldseth?= Date: Tue, 14 Jan 2025 15:39:46 +0100 Subject: [PATCH 24/28] Sorter regelsett etter paragraf som tall --- .../dagpenger/behandling/mediator/api/BehandlingApiMapper.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt index 5bfcf8cac..ed437c795 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/api/BehandlingApiMapper.kt @@ -85,12 +85,12 @@ internal fun Behandling.tilBehandlingDTO(): BehandlingDTO = behandler.regelverk .regelsettAvType(RegelsettType.Vilkår) .map { it.tilRegelsettDTO(opplysninger, avklaringer) } - .sortedBy { it.hjemmel.paragraf }, + .sortedBy { it.hjemmel.paragraf.toInt() }, fastsettelser = behandler.regelverk .regelsettAvType(RegelsettType.Fastsettelse) .map { it.tilRegelsettDTO(opplysninger, avklaringer) } - .sortedBy { it.hjemmel.paragraf }, + .sortedBy { it.hjemmel.paragraf.toInt() }, kreverTotrinnskontroll = this.kreverTotrinnskontroll(), avklaringer = generelleAvklaringer.map { it.tilAvklaringDTO() }, opplysninger = opplysninger.map { it.tilOpplysningDTO() }, From 344e7ed76c1b7c17484f03a36bc3c475eb64c586 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Andr=C3=A9=20Lund?= Date: Tue, 14 Jan 2025 16:31:37 +0100 Subject: [PATCH 25/28] Logger mere rund sletting. --- .../repository/VaktmesterPostgresRepo.kt | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt index aa169b9b4..7d2e7837c 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt @@ -51,7 +51,7 @@ internal class VaktmesterPostgresRepo { return slettet } - internal data class Kandidater( + internal data class Kandidat( val behandlingId: UUID?, val opplysningerId: UUID, private val opplysninger: MutableList = mutableListOf(), @@ -66,7 +66,7 @@ internal class VaktmesterPostgresRepo { private fun hentAlleOpplysningerSomErFjernet( session: Session, antall: Int, - ): List { + ): List { val kandidater = hentOpplysningerIder(session, antall) //language=PostgreSQL @@ -92,15 +92,24 @@ internal class VaktmesterPostgresRepo { ) }.asList, ) - }.filterNot { it.behandlingId.toString() == "01932f46-c4d3-755e-a4da-c572945a93b4" } - logger.info { "Fant ${kandidater.size} opplysningsett som inneholder opplysninger som er fjernet og som skal slettes" } + }.filter { it.behandlingId.toString() != "01932f46-c4d3-755e-a4da-c572945a93b4" } + logger.info { + val antallOpplysinger: Int = + kandidater + .map { + it.opplysninger().size + }.reduce { acc, i -> acc + i } + "Fant ${kandidater.size} opplysningsett for behandlinger ${kandidater.map { + it.behandlingId + }} som inneholder $antallOpplysinger opplysninger som er fjernet og som skal slettes" + } return opplysninger } private fun hentOpplysningerIder( session: Session, antall: Int, - ): List { + ): List { //language=PostgreSQL val test = """ @@ -118,7 +127,7 @@ internal class VaktmesterPostgresRepo { test, mapOf("antall" to antall), ).map { row -> - Kandidater( + Kandidat( row.uuidOrNull("behandling_id"), row.uuid("opplysinger_id"), ) From 7d1b607a994665422652aafe1840461c23900975 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Andr=C3=A9=20Lund?= Date: Tue, 14 Jan 2025 16:36:10 +0100 Subject: [PATCH 26/28] =?UTF-8?q?=C3=98ke=20antall.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../behandling/mediator/jobber/SlettFjernetOpplysninger.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt index 53025cf07..bf89b5c3d 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt @@ -19,7 +19,7 @@ internal object SlettFjernetOpplysninger { action = { try { if (System.getenv("NAIS_CLUSTER_NAME") == "dev-gcp") { - vaktmesterRepository.slettOpplysninger(antall = 1) + vaktmesterRepository.slettOpplysninger(antall = 2) } else { logger.info { "Sletting av fjernet opplysninger er skrudd av" } } From 6cd558ed9cf221abba13021edb21be3f2d4091c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Andr=C3=A9=20Lund?= Date: Tue, 14 Jan 2025 18:01:56 +0100 Subject: [PATCH 27/28] =?UTF-8?q?Skipper=20sletting=20av=20opplysninger=20?= =?UTF-8?q?som=20tilh=C3=B8rer=20opplysninger=5Fid=20som=20har=20en=20feil?= =?UTF-8?q?=20(mistenker=20f=C3=B8r=20https://github.com/navikt/dp-behandl?= =?UTF-8?q?ing/commit/f357ec1e6da3ebbc00e64edca1873caa4ff1cb69=20).=20Gjel?= =?UTF-8?q?der=20behandlingId=2001932f46-c4d3-755e-a4da-c572945a93b4=20i?= =?UTF-8?q?=20dev.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mediator/repository/VaktmesterPostgresRepo.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt index 7d2e7837c..e46357e03 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt @@ -92,7 +92,7 @@ internal class VaktmesterPostgresRepo { ) }.asList, ) - }.filter { it.behandlingId.toString() != "01932f46-c4d3-755e-a4da-c572945a93b4" } + } logger.info { val antallOpplysinger: Int = kandidater @@ -101,7 +101,7 @@ internal class VaktmesterPostgresRepo { }.reduce { acc, i -> acc + i } "Fant ${kandidater.size} opplysningsett for behandlinger ${kandidater.map { it.behandlingId - }} som inneholder $antallOpplysinger opplysninger som er fjernet og som skal slettes" + }} som inneholder $antallOpplysinger opplysninger som er fjernet og som skal slettes" } return opplysninger } @@ -117,7 +117,7 @@ internal class VaktmesterPostgresRepo { FROM opplysning INNER JOIN opplysninger_opplysning op ON opplysning.id = op.opplysning_id LEFT OUTER JOIN behandling_opplysninger b ON b.opplysninger_id = op.opplysninger_id - WHERE fjernet = TRUE + WHERE fjernet = TRUE AND op.opplysninger_id != '01932f46-c4d3-755e-a4da-c572945a93b5' LIMIT :antall; """.trimIndent() From 77293edce395ae0c8e72d36dbfc29581fbab54ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geir=20Andr=C3=A9=20Lund?= Date: Tue, 14 Jan 2025 18:28:32 +0100 Subject: [PATCH 28/28] =?UTF-8?q?=C3=98ker=20antall=20opplysningslister=20?= =?UTF-8?q?vi=20kan=20slette.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jobber/SlettFjernetOpplysninger.kt | 2 +- .../repository/VaktmesterPostgresRepo.kt | 18 ++++++------------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt index bf89b5c3d..83c5614f8 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/jobber/SlettFjernetOpplysninger.kt @@ -19,7 +19,7 @@ internal object SlettFjernetOpplysninger { action = { try { if (System.getenv("NAIS_CLUSTER_NAME") == "dev-gcp") { - vaktmesterRepository.slettOpplysninger(antall = 2) + vaktmesterRepository.slettOpplysninger(antall = 10) } else { logger.info { "Sletting av fjernet opplysninger er skrudd av" } } diff --git a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt index e46357e03..859db9efd 100644 --- a/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt +++ b/mediator/src/main/kotlin/no/nav/dagpenger/behandling/mediator/repository/VaktmesterPostgresRepo.kt @@ -20,7 +20,7 @@ internal class VaktmesterPostgresRepo { fun slettOpplysninger(antall: Int = 1): List { val slettet = mutableListOf() using(sessionOf(dataSource)) { session -> - val kandidater = hentAlleOpplysningerSomErFjernet(session, antall) + val kandidater = session.hentOpplysningerSomErFjernet(antall) kandidater.forEach { kandidat -> session.transaction { tx -> tx.medLås(låsenøkkel) { @@ -63,11 +63,8 @@ internal class VaktmesterPostgresRepo { fun opplysninger() = opplysninger.toList() } - private fun hentAlleOpplysningerSomErFjernet( - session: Session, - antall: Int, - ): List { - val kandidater = hentOpplysningerIder(session, antall) + private fun Session.hentOpplysningerSomErFjernet(antall: Int): List { + val kandidater = this.hentOpplysningerIder(antall) //language=PostgreSQL val query = @@ -82,7 +79,7 @@ internal class VaktmesterPostgresRepo { val opplysninger = kandidater .onEach { kandidat -> - session.run( + this.run( queryOf( query, mapOf("opplysninger_id" to kandidat.opplysningerId), @@ -106,10 +103,7 @@ internal class VaktmesterPostgresRepo { return opplysninger } - private fun hentOpplysningerIder( - session: Session, - antall: Int, - ): List { + private fun Session.hentOpplysningerIder(antall: Int): List { //language=PostgreSQL val test = """ @@ -122,7 +116,7 @@ internal class VaktmesterPostgresRepo { """.trimIndent() val opplysningerIder = - session.run( + this.run( queryOf( test, mapOf("antall" to antall),