Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Legg til funksjon for å generere aldersvilkår som følger nytt regelverk #1060

Merged
merged 8 commits into from
Jan 31, 2025
Original file line number Diff line number Diff line change
@@ -1,16 +1,53 @@
package no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering

import no.nav.familie.ks.sak.common.util.DATO_LOVENDRING_2024
import no.nav.familie.ks.sak.common.util.erSammeEllerEtter
import no.nav.familie.ks.sak.kjerne.behandling.domene.Behandling
import no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering.domene.PersonResultat
import no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering.domene.Resultat
import no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering.domene.UtdypendeVilkårsvurdering
import no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering.domene.Vilkår
import no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering.domene.VilkårResultat
import no.nav.familie.ks.sak.kjerne.lovverk.Lovverk
import no.nav.familie.ks.sak.kjerne.lovverk.LovverkUtleder
import java.time.LocalDate

fun lagAutomatiskGenererteVilkårForBarnetsAlder(
personResultat: PersonResultat,
behandling: Behandling,
behandlingId: Long,
fødselsdato: LocalDate,
erAdopsjon: Boolean = false,
skalBrukeRegelverk2025: Boolean = false,
): List<VilkårResultat> {
val lovverk = LovverkUtleder.utledLovverkForBarn(fødselsdato, skalBrukeRegelverk2025)
return when (lovverk) {
Lovverk.FØR_LOVENDRING_2025 -> lagAutomatiskGenererteVilkårForBarnetsAlder2021og2024(personResultat, behandlingId, fødselsdato, erAdopsjon)
Lovverk.LOVENDRING_FEBRUAR_2025 -> lagAutomatiskGenererteVilkårForBarnetsAlder2025(personResultat, behandlingId, fødselsdato, erAdopsjon)
}
}

private fun lagAutomatiskGenererteVilkårForBarnetsAlder2025(
personResultat: PersonResultat,
behandlingId: Long,
fødselsdato: LocalDate,
erAdopsjon: Boolean = false,
): List<VilkårResultat> =
listOf(
VilkårResultat(
personResultat = personResultat,
erAutomatiskVurdert = true,
resultat = Resultat.OPPFYLT,
vilkårType = Vilkår.BARNETS_ALDER,
begrunnelse = "Vurdert og satt automatisk",
behandlingId = behandlingId,
periodeFom = fødselsdato.plusMonths(12),
periodeTom = fødselsdato.plusMonths(20),
utdypendeVilkårsvurderinger = if (erAdopsjon) listOf(UtdypendeVilkårsvurdering.ADOPSJON) else emptyList(),
),
)

private fun lagAutomatiskGenererteVilkårForBarnetsAlder2021og2024(
personResultat: PersonResultat,
behandlingId: Long,
fødselsdato: LocalDate,
erAdopsjon: Boolean = false,
): List<VilkårResultat> {
Expand All @@ -31,7 +68,7 @@ fun lagAutomatiskGenererteVilkårForBarnetsAlder(
resultat = Resultat.OPPFYLT,
vilkårType = Vilkår.BARNETS_ALDER,
begrunnelse = "Vurdert og satt automatisk",
behandlingId = behandling.id,
behandlingId = behandlingId,
periodeFom = periodeFomBarnetsAlderLov2021,
periodeTom = minOf(periodeTomBarnetsAlderLov2021, DATO_LOVENDRING_2024.minusDays(1)),
utdypendeVilkårsvurderinger = if (erAdopsjon) listOf(UtdypendeVilkårsvurdering.ADOPSJON) else emptyList(),
Expand All @@ -48,7 +85,7 @@ fun lagAutomatiskGenererteVilkårForBarnetsAlder(
resultat = Resultat.OPPFYLT,
vilkårType = Vilkår.BARNETS_ALDER,
begrunnelse = "Vurdert og satt automatisk",
behandlingId = behandling.id,
behandlingId = behandlingId,
periodeFom = maxOf(periodeFomBarnetsAlderLov2024, DATO_LOVENDRING_2024),
periodeTom = periodeTomBarnetsAlderLov2024,
utdypendeVilkårsvurderinger = if (erAdopsjon) listOf(UtdypendeVilkårsvurdering.ADOPSJON) else emptyList(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import no.nav.familie.ks.sak.api.dto.EndreVilkårResultatDto
import no.nav.familie.ks.sak.api.dto.NyttVilkårDto
import no.nav.familie.ks.sak.api.dto.VedtakBegrunnelseTilknyttetVilkårResponseDto
import no.nav.familie.ks.sak.common.exception.Feil
import no.nav.familie.ks.sak.config.featureToggle.FeatureToggleConfig
import no.nav.familie.ks.sak.config.featureToggle.UnleashNextMedContextService
import no.nav.familie.ks.sak.integrasjon.sanity.SanityService
import no.nav.familie.ks.sak.integrasjon.secureLogger
import no.nav.familie.ks.sak.kjerne.behandling.domene.Behandling
Expand All @@ -30,6 +32,7 @@ class VilkårsvurderingService(
private val personopplysningGrunnlagService: PersonopplysningGrunnlagService,
private val sanityService: SanityService,
private val personidentService: PersonidentService,
private val unleashService: UnleashNextMedContextService,
) {
@Transactional
fun opprettVilkårsvurdering(
Expand All @@ -49,6 +52,7 @@ class VilkårsvurderingService(
behandling,
vilkårsvurderingFraForrigeBehandling,
personopplysningGrunnlag,
unleashService.isEnabled(FeatureToggleConfig.STØTTER_LOVENDRING_2025),
)

vilkårsvurderingFraForrigeBehandling?.let {
Expand Down Expand Up @@ -94,8 +98,7 @@ class VilkårsvurderingService(

fun finnAktivVilkårsvurdering(behandlingId: Long): Vilkårsvurdering? = vilkårsvurderingRepository.finnAktivForBehandling(behandlingId)

fun hentVilkårsbegrunnelser(): Map<BegrunnelseType, List<VedtakBegrunnelseTilknyttetVilkårResponseDto>> =
standardbegrunnelserTilNedtrekksmenytekster(sanityService.hentSanityBegrunnelser())
fun hentVilkårsbegrunnelser(): Map<BegrunnelseType, List<VedtakBegrunnelseTilknyttetVilkårResponseDto>> = standardbegrunnelserTilNedtrekksmenytekster(sanityService.hentSanityBegrunnelser())

@Transactional
fun endreVilkårPåBehandling(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering

import lagAutomatiskGenererteVilkårForBarnetsAlder
import no.nav.familie.ks.sak.api.dto.VedtakBegrunnelseTilknyttetVilkårResponseDto
import no.nav.familie.ks.sak.api.dto.VilkårResultatDto
import no.nav.familie.ks.sak.common.exception.FunksjonellFeil
Expand Down Expand Up @@ -240,6 +239,7 @@ fun genererInitiellVilkårsvurdering(
behandling: Behandling,
forrigeVilkårsvurdering: Vilkårsvurdering?,
personopplysningGrunnlag: PersonopplysningGrunnlag,
skalBrukeRegelverk2025: Boolean = false,
): Vilkårsvurdering =
Vilkårsvurdering(behandling = behandling).apply {
personResultater =
Expand All @@ -266,8 +266,9 @@ fun genererInitiellVilkårsvurdering(
Vilkår.BARNETS_ALDER -> {
lagAutomatiskGenererteVilkårForBarnetsAlder(
personResultat = personResultat,
behandling = behandling,
behandlingId = behandling.id,
fødselsdato = person.fødselsdato,
skalBrukeRegelverk2025 = skalBrukeRegelverk2025,
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ class CucumberMock(
personopplysningGrunnlagService = personopplysningGrunnlagService,
sanityService = mockk(),
personidentService = personidentService,
unleashService = mockUnleashNextMedContextService(),
)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering

import no.nav.familie.ks.sak.data.lagPersonResultat
import no.nav.familie.ks.sak.data.lagVilkårsvurdering
import no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering.domene.Resultat
import no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering.domene.UtdypendeVilkårsvurdering
import no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering.domene.Vilkår
import no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering.domene.VilkårResultat
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import java.time.LocalDate

class AutomatiskSatteVilkårUtilsKtTest {
private val fødselsDato = LocalDate.of(2024, 1, 1)
private val behandlingId = 0L
private val personResultat =
lagPersonResultat(
vilkårsvurdering = lagVilkårsvurdering(),
lagVilkårResultater = { emptySet() },
)

@Test
fun `skal bruke gammelt regelverk for barn født fra og med første januar 2024 hvis toggle er skrudd av`() {
// Act
val barnetsAlderVilkår =
lagAutomatiskGenererteVilkårForBarnetsAlder(
personResultat = personResultat,
behandlingId = behandlingId,
fødselsdato = fødselsDato,
skalBrukeRegelverk2025 = false,
)

// Assert
assertThat(barnetsAlderVilkår).hasSize(1)
assertThat(barnetsAlderVilkår).anySatisfy {
validerFellesfelter(it)
assertThat(it.periodeFom).isEqualTo(fødselsDato.plusMonths(13))
assertThat(it.periodeTom).isEqualTo(fødselsDato.plusMonths(19))
assertThat(it.utdypendeVilkårsvurderinger).isEmpty()
}
}

@Test
fun `skal bruke nytt regelverk for barn født fra og med første januar 2024 hvis toggle er skrudd på`() {
// Act
val barnetsAlderVilkår =
lagAutomatiskGenererteVilkårForBarnetsAlder(
personResultat = personResultat,
behandlingId = behandlingId,
fødselsdato = fødselsDato,
erAdopsjon = false,
skalBrukeRegelverk2025 = true,
)

// Assert
assertThat(barnetsAlderVilkår).hasSize(1)
assertThat(barnetsAlderVilkår).anySatisfy {
validerFellesfelter(it)
assertThat(it.periodeFom).isEqualTo(fødselsDato.plusMonths(12))
assertThat(it.periodeTom).isEqualTo(fødselsDato.plusMonths(20))
assertThat(it.utdypendeVilkårsvurderinger).isEmpty()
}
}

@Test
fun `skal bruke nytt regelverk for barn adoptert fra og med første januar 2024 hvis toggle er skrudd på`() {
// Act
val barnetsAlderVilkår =
lagAutomatiskGenererteVilkårForBarnetsAlder(
personResultat = personResultat,
behandlingId = behandlingId,
fødselsdato = fødselsDato,
erAdopsjon = true,
skalBrukeRegelverk2025 = true,
)

// Assert
assertThat(barnetsAlderVilkår).hasSize(1)
assertThat(barnetsAlderVilkår).anySatisfy {
validerFellesfelter(it)
assertThat(it.periodeFom).isEqualTo(fødselsDato.plusMonths(12))
assertThat(it.periodeTom).isEqualTo(fødselsDato.plusMonths(20))
assertThat(it.utdypendeVilkårsvurderinger).containsExactly(UtdypendeVilkårsvurdering.ADOPSJON)
}
}

private fun validerFellesfelter(it: VilkårResultat) {
assertThat(it.personResultat).isEqualTo(personResultat)
assertThat(it.erAutomatiskVurdert).isTrue()
assertThat(it.resultat).isEqualTo(Resultat.OPPFYLT)
assertThat(it.vilkårType).isEqualTo(Vilkår.BARNETS_ALDER)
assertThat(it.begrunnelse).isEqualTo("Vurdert og satt automatisk")
assertThat(it.behandlingId).isEqualTo(behandlingId)
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
package no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering

import io.mockk.every
import io.mockk.impl.annotations.InjectMockKs
import io.mockk.impl.annotations.MockK
import io.mockk.junit5.MockKExtension
import io.mockk.mockk
import io.mockk.slot
import no.nav.familie.ks.sak.common.exception.Feil
import no.nav.familie.ks.sak.config.featureToggle.UnleashNextMedContextService
import no.nav.familie.ks.sak.data.fnrTilFødselsdato
import no.nav.familie.ks.sak.data.lagBehandling
import no.nav.familie.ks.sak.data.lagFagsak
Expand All @@ -31,34 +30,39 @@ import org.hamcrest.Matchers.containsInAnyOrder
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
import org.junit.jupiter.api.extension.ExtendWith
import org.hamcrest.CoreMatchers.`is` as Is

@ExtendWith(MockKExtension::class)
class VilkårsvurderingServiceTest {
@MockK
private lateinit var vilkårsvurderingRepository: VilkårsvurderingRepository

@MockK
private lateinit var personopplysningGrunnlagService: PersonopplysningGrunnlagService

@MockK
private lateinit var sanityService: SanityService

@MockK
private lateinit var personidentService: PersonidentService

@InjectMockKs
private lateinit var vilkårsvurderingService: VilkårsvurderingService
private val vilkårsvurderingRepository: VilkårsvurderingRepository = mockk()
private val personopplysningGrunnlagService: PersonopplysningGrunnlagService = mockk()
private val sanityService: SanityService = mockk()
private val personidentService: PersonidentService = mockk()
private val unleashService: UnleashNextMedContextService = mockk()
private val vilkårsvurderingService =
VilkårsvurderingService(
vilkårsvurderingRepository,
personopplysningGrunnlagService,
sanityService,
personidentService,
unleashService,
)

private val søker = randomAktør()

private val fagsak = lagFagsak(søker)

private val behandling = lagBehandling(fagsak, opprettetÅrsak = BehandlingÅrsak.SØKNAD)

@BeforeEach
fun setUp() {
every { unleashService.isEnabled(any()) } returns true
}

@Test
fun `opprettVilkårsvurdering - skal opprette tom vilkårsvurdering dersom det ikke finnes tidligere vedtatte behandlinger på fagsak`() {
val barn1 = randomAktør()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package no.nav.familie.ks.sak.kjerne.beregning

import lagAutomatiskGenererteVilkårForBarnetsAlder
import no.nav.familie.ks.sak.data.lagBehandling
import no.nav.familie.ks.sak.data.lagVilkårsvurdering
import no.nav.familie.ks.sak.data.tilfeldigPerson
import no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering.VilkårLovverkInformasjonForBarn
import no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering.domene.PersonResultat
import no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering.domene.Resultat
import no.nav.familie.ks.sak.kjerne.behandling.steg.vilkårsvurdering.lagAutomatiskGenererteVilkårForBarnetsAlder
import no.nav.familie.ks.sak.kjerne.beregning.lovverkFørFebruar2025.utledMaksAntallMånederMedUtbetaling
import no.nav.familie.ks.sak.kjerne.personopplysninggrunnlag.domene.PersonType
import org.assertj.core.api.Assertions.assertThat
Expand Down Expand Up @@ -37,7 +37,7 @@ class MaksAntallMånederMedUtbetalingUtlederKtTest {
vilkårsvurdering = vilkårsvurdering,
aktør = tilfeldigPerson(fødselsdato = fødselsdato).aktør,
)
val barnetsAlderVilkårResultater = lagAutomatiskGenererteVilkårForBarnetsAlder(personResultat, behandling, fødselsdato)
val barnetsAlderVilkårResultater = lagAutomatiskGenererteVilkårForBarnetsAlder(personResultat, behandling.id, fødselsdato)

// Act
val maksAntallMånederMedUtbetaling = utledMaksAntallMånederMedUtbetaling(vilkårLovverkInformasjonForBarn, barnetsAlderVilkårResultater)
Expand All @@ -60,7 +60,7 @@ class MaksAntallMånederMedUtbetalingUtlederKtTest {
vilkårsvurdering = vilkårsvurdering,
aktør = tilfeldigPerson(fødselsdato = fødselsdato).aktør,
)
val barnetsAlderVilkårResultater = lagAutomatiskGenererteVilkårForBarnetsAlder(personResultat, behandling, fødselsdato)
val barnetsAlderVilkårResultater = lagAutomatiskGenererteVilkårForBarnetsAlder(personResultat, behandling.id, fødselsdato)

// Act
val maksAntallMånederMedUtbetaling = utledMaksAntallMånederMedUtbetaling(vilkårLovverkInformasjonForBarn, barnetsAlderVilkårResultater)
Expand All @@ -83,7 +83,7 @@ class MaksAntallMånederMedUtbetalingUtlederKtTest {
vilkårsvurdering = vilkårsvurdering,
aktør = tilfeldigPerson(fødselsdato = fødselsdato).aktør,
)
val barnetsAlderVilkårResultater = lagAutomatiskGenererteVilkårForBarnetsAlder(personResultat, behandling, fødselsdato)
val barnetsAlderVilkårResultater = lagAutomatiskGenererteVilkårForBarnetsAlder(personResultat, behandling.id, fødselsdato)

// Act
val maksAntallMånederMedUtbetaling = utledMaksAntallMånederMedUtbetaling(vilkårLovverkInformasjonForBarn, barnetsAlderVilkårResultater)
Expand All @@ -106,7 +106,7 @@ class MaksAntallMånederMedUtbetalingUtlederKtTest {
vilkårsvurdering = vilkårsvurdering,
aktør = tilfeldigPerson(fødselsdato = fødselsdato).aktør,
)
val barnetsAlderVilkårResultater = lagAutomatiskGenererteVilkårForBarnetsAlder(personResultat, behandling, fødselsdato)
val barnetsAlderVilkårResultater = lagAutomatiskGenererteVilkårForBarnetsAlder(personResultat, behandling.id, fødselsdato)

// Act
val maksAntallMånederMedUtbetaling = utledMaksAntallMånederMedUtbetaling(vilkårLovverkInformasjonForBarn, barnetsAlderVilkårResultater)
Expand Down
Loading