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

Legger ikke til andeler for refusjon dersom det ikke utbetales ytelse… #585

Merged
merged 1 commit into from
Dec 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -78,22 +78,32 @@ protected List<Intervall> finnGyldigeRefusjonPerioder(LocalDate startdatoEtterPe
}

private LocalDateTimeline<Boolean> finnUtbetalingTidslinje(UtbetalingsgradGrunnlag ytelsespesifiktGrunnlag, InntektsmeldingDto im) {
final List<LocalDateTimeline<Boolean>> segmenterMedUtbetaling = UtbetalingsgradTjeneste.finnPerioderForArbeid(ytelsespesifiktGrunnlag, im.getArbeidsgiver(), im.getArbeidsforholdRef(), false)
.stream()
.flatMap(u -> u.getPeriodeMedUtbetalingsgrad().stream())
.filter(p -> harOverNullProsentUtbetalingsgrad(p) || harMindreEnnHundreProsentAktivitetsgrad(p))
.map(PeriodeMedUtbetalingsgradDto::getPeriode)
.map(p -> new LocalDateTimeline<>(List.of(new LocalDateSegment<>(p.getFomDato(), p.getTomDato(), true))))
.toList();

var timeline = new LocalDateTimeline<Boolean>(List.of());
final LocalDateTimeline<Boolean> tidslinjeMedFraværHosArbeidsgiver = finnTidslinjeMedFraværHosArbeidsgiver(ytelsespesifiktGrunnlag, im);
final var tidslinjeForYtelse = finnTidslinjeForYtelse(ytelsespesifiktGrunnlag);
return tidslinjeMedFraværHosArbeidsgiver.intersection(tidslinjeForYtelse).compress();
}

for (LocalDateTimeline<Boolean> localDateSegments : segmenterMedUtbetaling) {
timeline = timeline.combine(localDateSegments, StandardCombinators::coalesceRightHandSide, LocalDateTimeline.JoinStyle.CROSS_JOIN);
}
private static LocalDateTimeline<Boolean> finnTidslinjeMedFraværHosArbeidsgiver(UtbetalingsgradGrunnlag ytelsespesifiktGrunnlag, InntektsmeldingDto im) {
return UtbetalingsgradTjeneste.finnPerioderForArbeid(ytelsespesifiktGrunnlag, im.getArbeidsgiver(), im.getArbeidsforholdRef(), false)
.stream()
.flatMap(u -> u.getPeriodeMedUtbetalingsgrad().stream())
.filter(p -> harOverNullProsentUtbetalingsgrad(p) || harMindreEnnHundreProsentAktivitetsgrad(p))
.map(PeriodeMedUtbetalingsgradDto::getPeriode)
.map(p -> new LocalDateTimeline<>(p.getFomDato(), p.getTomDato(), true))
.reduce(LocalDateTimeline::crossJoin)
.orElse(LocalDateTimeline.empty());
}

return timeline.compress();
}
private static LocalDateTimeline<Boolean> finnTidslinjeForYtelse(UtbetalingsgradGrunnlag ytelsespesifiktGrunnlag) {
return ytelsespesifiktGrunnlag.getUtbetalingsgradPrAktivitet()
.stream()
.flatMap(u -> u.getPeriodeMedUtbetalingsgrad().stream())
.filter(MapRefusjonPerioderFraVLTilRegelUtbgrad::harOverNullProsentUtbetalingsgrad)
.map(PeriodeMedUtbetalingsgradDto::getPeriode)
.map(p -> new LocalDateTimeline<>(p.getFomDato(), p.getTomDato(), true))
.reduce(LocalDateTimeline::crossJoin)
.orElse(LocalDateTimeline.empty());
}

private static boolean harOverNullProsentUtbetalingsgrad(PeriodeMedUtbetalingsgradDto p) {
return p.getUtbetalingsgrad() != null && p.getUtbetalingsgrad().compareTo(Utbetalingsgrad.ZERO) > 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import no.nav.folketrygdloven.kalkulator.modell.beregningsgrunnlag.BeregningsgrunnlagGrunnlagDtoBuilder;
import no.nav.folketrygdloven.kalkulator.modell.beregningsgrunnlag.BeregningsgrunnlagPeriodeDto;
import no.nav.folketrygdloven.kalkulator.modell.beregningsgrunnlag.BeregningsgrunnlagPrStatusOgAndelDto;
import no.nav.folketrygdloven.kalkulator.modell.iay.AktivitetsAvtaleDto;
import no.nav.folketrygdloven.kalkulator.modell.iay.AktivitetsAvtaleDtoBuilder;
import no.nav.folketrygdloven.kalkulator.modell.iay.InntektArbeidYtelseAggregatBuilder;
import no.nav.folketrygdloven.kalkulator.modell.iay.InntektArbeidYtelseGrunnlagDto;
Expand All @@ -42,6 +43,7 @@
import no.nav.folketrygdloven.kalkulator.modell.svp.AktivitetDto;
import no.nav.folketrygdloven.kalkulator.modell.svp.PeriodeMedUtbetalingsgradDto;
import no.nav.folketrygdloven.kalkulator.modell.svp.UtbetalingsgradPrAktivitetDto;
import no.nav.folketrygdloven.kalkulator.modell.typer.Aktivitetsgrad;
import no.nav.folketrygdloven.kalkulator.modell.typer.Arbeidsgiver;
import no.nav.folketrygdloven.kalkulator.modell.typer.Beløp;
import no.nav.folketrygdloven.kalkulator.modell.typer.InternArbeidsforholdRefDto;
Expand Down Expand Up @@ -223,6 +225,28 @@ void skal_gi_refusjon_fra_start_for_arbeid_som_har_oppgitt_feil_startdato_i_innt
Assertions.assertThat(opphør.getPeriode().getFom()).isEqualTo(LocalDate.of(2020, 1, 19).plusDays(1));
}

@Test
void skal_ikke_returnere_periode_for_fravær_fra_arbeidsgiver_men_ingen_uttak() {
var stp = LocalDate.now();
var arbeidsgiver = Arbeidsgiver.virksomhet("123456789");
var utbetalingsperiode = Intervall.fraOgMedTilOgMed(stp.plusDays(20), stp.plusDays(25));
var gradForTilkommetArbeid = new UtbetalingsgradPrAktivitetDto(
new AktivitetDto(arbeidsgiver, InternArbeidsforholdRefDto.nullRef(), UttakArbeidType.ORDINÆRT_ARBEID),
List.of(new PeriodeMedUtbetalingsgradDto(utbetalingsperiode, new Utbetalingsgrad(BigDecimal.ZERO),
new Aktivitetsgrad(BigDecimal.valueOf(50)))));
var ytelsespesifiktGrunnlag = new PleiepengerSyktBarnGrunnlag(List.of(gradForTilkommetArbeid));
var inntektsmelding = lagInntektsmelding(stp, arbeidsgiver);
var ansettelsesperiode = Intervall.fraOgMedTilOgMed(stp.minusYears(10), stp.plusYears(15));
var aktivitetsAvtaleDtoBuilder = AktivitetsAvtaleDtoBuilder.ny().medPeriode(ansettelsesperiode).medErAnsettelsesPeriode(true);
var permisjonsperiode = Intervall.fraOgMedTilOgMed(stp.minusDays(1), stp.plusDays(15));
var relaterteYrkesaktiviteter = Set.of(lagYrkesaktivitet(arbeidsgiver, aktivitetsAvtaleDtoBuilder, permisjonsperiode));

var avtaler = relaterteYrkesaktiviteter.iterator().next().getAlleAnsettelsesperioder().stream().toList();
var perioder = mapper.finnGyldigeRefusjonPerioder(stp, ytelsespesifiktGrunnlag, inntektsmelding, avtaler, relaterteYrkesaktiviteter);

assertThat(perioder.isEmpty()).isTrue();
}


private PleiepengerSyktBarnGrunnlag lagUtbetalingsgrunnlag(Arbeidsgiver arbeidsgiver, Intervall utbetalingsperiode) {
return new PleiepengerSyktBarnGrunnlag(List.of(new UtbetalingsgradPrAktivitetDto(
Expand Down
Loading