diff --git "a/kalkulator/src/main/java/no/nav/folketrygdloven/kalkulator/adapter/ErS\303\270ktYtelseFor.java" "b/kalkulator/src/main/java/no/nav/folketrygdloven/kalkulator/adapter/ErS\303\270ktYtelseFor.java" new file mode 100644 index 00000000..f1e3ad22 --- /dev/null +++ "b/kalkulator/src/main/java/no/nav/folketrygdloven/kalkulator/adapter/ErS\303\270ktYtelseFor.java" @@ -0,0 +1,37 @@ +package no.nav.folketrygdloven.kalkulator.adapter; + +import static no.nav.folketrygdloven.kalkulator.adapter.vltilregelmodell.UtbetalingsgradTjeneste.finnAktivitetsgradForAndel; +import static no.nav.folketrygdloven.kalkulator.adapter.vltilregelmodell.UtbetalingsgradTjeneste.finnUtbetalingsgradForAndel; + +import java.util.Optional; + +import no.nav.folketrygdloven.kalkulator.input.YtelsespesifiktGrunnlag; +import no.nav.folketrygdloven.kalkulator.modell.beregningsgrunnlag.BeregningsgrunnlagPrStatusOgAndelDto; +import no.nav.folketrygdloven.kalkulator.modell.svp.PeriodeMedUtbetalingsgradDto; +import no.nav.folketrygdloven.kalkulator.modell.typer.Aktivitetsgrad; +import no.nav.folketrygdloven.kalkulator.modell.typer.Utbetalingsgrad; +import no.nav.folketrygdloven.kalkulator.tid.Intervall; + +/** + * Avgjør om det er søkt ytelse for aktivitet. + */ +public class ErSøktYtelseFor { + + public static boolean erSøktYtelseFor(BeregningsgrunnlagPrStatusOgAndelDto bgAndel, Intervall periode, YtelsespesifiktGrunnlag ytelsespesifiktGrunnlag, boolean skalIgnorereIkkeYrkesaktivStatus) { + return harOverNullProsentUtbetalingsgrad(finnUtbetalingsgradForAndel(bgAndel, periode, ytelsespesifiktGrunnlag, skalIgnorereIkkeYrkesaktivStatus)) || + harMindreEnnHundreProsentAktivitetsgrad(finnAktivitetsgradForAndel(bgAndel, periode, ytelsespesifiktGrunnlag, skalIgnorereIkkeYrkesaktivStatus)); + } + + public static boolean erSøktYtelseFor(PeriodeMedUtbetalingsgradDto p) { + return harOverNullProsentUtbetalingsgrad(p.getUtbetalingsgrad()) || harMindreEnnHundreProsentAktivitetsgrad(p.getAktivitetsgrad()); + } + + private static boolean harOverNullProsentUtbetalingsgrad(Utbetalingsgrad utbetalingsgrad) { + return utbetalingsgrad != null && utbetalingsgrad.compareTo(Utbetalingsgrad.ZERO) > 0; + } + + private static boolean harMindreEnnHundreProsentAktivitetsgrad(Optional aktivitetsgrad) { + return aktivitetsgrad.map(ag -> ag.compareTo(Aktivitetsgrad.HUNDRE) < 0).orElse(false); + } + +} diff --git a/kalkulator/src/main/java/no/nav/folketrygdloven/kalkulator/adapter/vltilregelmodell/MapTilFordelingsmodell.java b/kalkulator/src/main/java/no/nav/folketrygdloven/kalkulator/adapter/vltilregelmodell/MapTilFordelingsmodell.java index 38a7103e..bd68c3aa 100644 --- a/kalkulator/src/main/java/no/nav/folketrygdloven/kalkulator/adapter/vltilregelmodell/MapTilFordelingsmodell.java +++ b/kalkulator/src/main/java/no/nav/folketrygdloven/kalkulator/adapter/vltilregelmodell/MapTilFordelingsmodell.java @@ -10,6 +10,7 @@ import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.AktivitetStatus; import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.Periode; import no.nav.folketrygdloven.beregningsgrunnlag.regelmodell.grunnlag.inntekt.Arbeidsforhold; +import no.nav.folketrygdloven.kalkulator.adapter.ErSøktYtelseFor; import no.nav.folketrygdloven.kalkulator.adapter.util.FinnArbeidsperiode; import no.nav.folketrygdloven.kalkulator.adapter.vltilregelmodell.kodeverk.MapInntektskategoriFraVLTilRegel; import no.nav.folketrygdloven.kalkulator.avklaringsbehov.PerioderTilVurderingTjeneste; @@ -99,7 +100,7 @@ private static BigDecimal finnInntektFraIM(BeregningsgrunnlagPrStatusOgAndelDto } private static boolean erSøktYtelseFor(BeregningsgrunnlagPrStatusOgAndelDto bgAndel, YtelsespesifiktGrunnlag ytelsespesifiktGrunnlag) { - return UtbetalingsgradTjeneste.erSøktYtelseFor(bgAndel, bgAndel.getBeregningsgrunnlagPeriode().getPeriode(), ytelsespesifiktGrunnlag, false); + return ErSøktYtelseFor.erSøktYtelseFor(bgAndel, bgAndel.getBeregningsgrunnlagPeriode().getPeriode(), ytelsespesifiktGrunnlag, false); } private static Optional mapArbeidsforhold(BeregningsgrunnlagPrStatusOgAndelDto bgAndel) { diff --git a/kalkulator/src/main/java/no/nav/folketrygdloven/kalkulator/adapter/vltilregelmodell/UtbetalingsgradTjeneste.java b/kalkulator/src/main/java/no/nav/folketrygdloven/kalkulator/adapter/vltilregelmodell/UtbetalingsgradTjeneste.java index 0581d5dd..af5a8e15 100644 --- a/kalkulator/src/main/java/no/nav/folketrygdloven/kalkulator/adapter/vltilregelmodell/UtbetalingsgradTjeneste.java +++ b/kalkulator/src/main/java/no/nav/folketrygdloven/kalkulator/adapter/vltilregelmodell/UtbetalingsgradTjeneste.java @@ -22,25 +22,6 @@ public class UtbetalingsgradTjeneste { - - public static boolean erSøktYtelseFor(BeregningsgrunnlagPrStatusOgAndelDto bgAndel, Intervall periode, YtelsespesifiktGrunnlag ytelsespesifiktGrunnlag, boolean skalIgnorereIkkeYrkesaktivStatus) { - return harOverNullProsentUtbetalingsgrad(finnUtbetalingsgradForAndel(bgAndel, periode, ytelsespesifiktGrunnlag, skalIgnorereIkkeYrkesaktivStatus)) || - harMindreEnnHundreProsentAktivitetsgrad(finnAktivitetsgradForAndel(bgAndel, periode, ytelsespesifiktGrunnlag, skalIgnorereIkkeYrkesaktivStatus)); - } - - public static boolean erSøktYtelseFor(PeriodeMedUtbetalingsgradDto p) { - return harOverNullProsentUtbetalingsgrad(p.getUtbetalingsgrad()) || harMindreEnnHundreProsentAktivitetsgrad(p.getAktivitetsgrad()); - } - - private static boolean harOverNullProsentUtbetalingsgrad(Utbetalingsgrad utbetalingsgrad) { - return utbetalingsgrad != null && utbetalingsgrad.compareTo(Utbetalingsgrad.ZERO) > 0; - } - - private static boolean harMindreEnnHundreProsentAktivitetsgrad(Optional aktivitetsgrad) { - return aktivitetsgrad.map(ag -> ag.compareTo(Aktivitetsgrad.HUNDRE) < 0).orElse(false); - } - - public static Beløp finnGradertBruttoForAndel(BeregningsgrunnlagPrStatusOgAndelDto andel, Intervall periode, YtelsespesifiktGrunnlag ytelsesSpesifiktGrunnlag) { diff --git a/kalkulator/src/main/java/no/nav/folketrygdloven/kalkulator/ytelse/k9/MapRefusjonPerioderFraVLTilRegelPleiepenger.java b/kalkulator/src/main/java/no/nav/folketrygdloven/kalkulator/ytelse/k9/MapRefusjonPerioderFraVLTilRegelPleiepenger.java index 4b390f0a..bdeafce2 100644 --- a/kalkulator/src/main/java/no/nav/folketrygdloven/kalkulator/ytelse/k9/MapRefusjonPerioderFraVLTilRegelPleiepenger.java +++ b/kalkulator/src/main/java/no/nav/folketrygdloven/kalkulator/ytelse/k9/MapRefusjonPerioderFraVLTilRegelPleiepenger.java @@ -9,6 +9,7 @@ import java.util.stream.Collectors; import no.nav.folketrygdloven.kalkulator.KonfigurasjonVerdi; +import no.nav.folketrygdloven.kalkulator.adapter.ErSøktYtelseFor; import no.nav.folketrygdloven.kalkulator.adapter.vltilregelmodell.UtbetalingsgradTjeneste; import no.nav.folketrygdloven.kalkulator.input.UtbetalingsgradGrunnlag; import no.nav.folketrygdloven.kalkulator.input.YtelsespesifiktGrunnlag; @@ -87,7 +88,7 @@ private LocalDateTimeline finnUtbetalingTidslinje(UtbetalingsgradGrunnl final List> segmenterMedUtbetaling = UtbetalingsgradTjeneste.finnPerioderForArbeid(ytelsespesifiktGrunnlag, im.getArbeidsgiver(), im.getArbeidsforholdRef(), true) .stream() .flatMap(u -> u.getPeriodeMedUtbetalingsgrad().stream()) - .filter(UtbetalingsgradTjeneste::erSøktYtelseFor) + .filter(ErSøktYtelseFor::erSøktYtelseFor) .map(PeriodeMedUtbetalingsgradDto::getPeriode) .map(p -> new LocalDateTimeline<>(List.of(new LocalDateSegment<>(p.getFomDato(), p.getTomDato(), true)))) .collect(Collectors.toList()); diff --git "a/kalkulator/src/test/java/no/nav/folketrygdloven/kalkulator/adapter/vltilregelmodell/ErS\303\270ktYtelseForTest.java" "b/kalkulator/src/test/java/no/nav/folketrygdloven/kalkulator/adapter/vltilregelmodell/ErS\303\270ktYtelseForTest.java" new file mode 100644 index 00000000..706e5a62 --- /dev/null +++ "b/kalkulator/src/test/java/no/nav/folketrygdloven/kalkulator/adapter/vltilregelmodell/ErS\303\270ktYtelseForTest.java" @@ -0,0 +1,69 @@ +package no.nav.folketrygdloven.kalkulator.adapter.vltilregelmodell; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; + +import java.time.LocalDate; + +import org.junit.jupiter.api.Test; + +import no.nav.folketrygdloven.kalkulator.adapter.ErSøktYtelseFor; +import no.nav.folketrygdloven.kalkulator.modell.svp.PeriodeMedUtbetalingsgradDto; +import no.nav.folketrygdloven.kalkulator.modell.typer.Aktivitetsgrad; +import no.nav.folketrygdloven.kalkulator.modell.typer.Utbetalingsgrad; +import no.nav.folketrygdloven.kalkulator.tid.Intervall; + +class ErSøktYtelseForTest { + + @Test + void skal_gi_søkt_ytelse_for_lik_false_når_utbetalingsgrad_er_lik_null_og_aktivitetsgrad_ikke_er_satt() { + var intervall = Intervall.fraOgMedTilOgMed(LocalDate.now(), LocalDate.now()); + var erSøktYtelseFor = ErSøktYtelseFor.erSøktYtelseFor(new PeriodeMedUtbetalingsgradDto(intervall, Utbetalingsgrad.ZERO, null)); + assertThat(erSøktYtelseFor).isFalse(); + } + + @Test + void skal_gi_søkt_ytelse_for_lik_false_når_utbetalingsgrad_er_lik_null_og_aktivitetsgrad_lik_hundre() { + var intervall = Intervall.fraOgMedTilOgMed(LocalDate.now(), LocalDate.now()); + var erSøktYtelseFor = ErSøktYtelseFor.erSøktYtelseFor(new PeriodeMedUtbetalingsgradDto(intervall, Utbetalingsgrad.ZERO, Aktivitetsgrad.HUNDRE)); + assertThat(erSøktYtelseFor).isFalse(); + } + + @Test + void skal_gi_søkt_ytelse_for_lik_true_når_utbetalingsgrad_er_over_null_og_aktivitetsgrad_ikke_satt() { + var intervall = Intervall.fraOgMedTilOgMed(LocalDate.now(), LocalDate.now()); + var erSøktYtelseFor = ErSøktYtelseFor.erSøktYtelseFor(new PeriodeMedUtbetalingsgradDto(intervall, Utbetalingsgrad.valueOf(1), null)); + assertThat(erSøktYtelseFor).isTrue(); + } + + @Test + void skal_gi_søkt_ytelse_for_lik_true_når_utbetalingsgrad_er_over_null_og_aktivitetsgrad_lik_hundre() { + // Feilsituasjon, f.eks avrundingsfeil i aktivitetsgrad eller utbetalingsgrad. prio til utbetalingsgrad + var intervall = Intervall.fraOgMedTilOgMed(LocalDate.now(), LocalDate.now()); + var erSøktYtelseFor = ErSøktYtelseFor.erSøktYtelseFor(new PeriodeMedUtbetalingsgradDto(intervall, Utbetalingsgrad.valueOf(1), Aktivitetsgrad.HUNDRE)); + assertThat(erSøktYtelseFor).isTrue(); + } + + @Test + void skal_gi_søkt_ytelse_for_lik_true_når_utbetalingsgrad_er_over_null_og_aktivitetsgrad_er_under_hundre() { + var intervall = Intervall.fraOgMedTilOgMed(LocalDate.now(), LocalDate.now()); + var erSøktYtelseFor = ErSøktYtelseFor.erSøktYtelseFor(new PeriodeMedUtbetalingsgradDto(intervall, Utbetalingsgrad.valueOf(1), Aktivitetsgrad.fra(99))); + assertThat(erSøktYtelseFor).isTrue(); + } + + @Test + void skal_gi_søkt_ytelse_for_lik_true_når_utbetalingsgrad_er_null_og_aktivitetsgrad_er_under_hundre() { + var intervall = Intervall.fraOgMedTilOgMed(LocalDate.now(), LocalDate.now()); + var erSøktYtelseFor = ErSøktYtelseFor.erSøktYtelseFor(new PeriodeMedUtbetalingsgradDto(intervall, Utbetalingsgrad.ZERO, Aktivitetsgrad.fra(99))); + assertThat(erSøktYtelseFor).isTrue(); + } + + + @Test + void skal_gi_søkt_ytelse_for_lik_false_når_utbetalingsgrad_er_null_og_aktivitetsgrad_er_hundre() { + var intervall = Intervall.fraOgMedTilOgMed(LocalDate.now(), LocalDate.now()); + var erSøktYtelseFor = ErSøktYtelseFor.erSøktYtelseFor(new PeriodeMedUtbetalingsgradDto(intervall, Utbetalingsgrad.ZERO, Aktivitetsgrad.HUNDRE)); + assertThat(erSøktYtelseFor).isFalse(); + } + + +} \ No newline at end of file