Skip to content

Commit

Permalink
Ser etter tilkommet inntekt i alle deler av vilkårsperioden (#560)
Browse files Browse the repository at this point in the history
* Ser etter tilkommet inntekt i alle deler av vilkårsperioden

* Forenkler tidslinjer
  • Loading branch information
espenjv authored Oct 30, 2024
1 parent d31b913 commit 4a42914
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public BeregningsgrunnlagDto splittPerioderVedTilkommetInntekt(Beregningsgrunnla
.combine(opprettTidslinje(input.getForlengelseperioder()), StandardCombinators::leftOnly, input.getForlengelseperioder().isEmpty() ? LocalDateTimeline.JoinStyle.LEFT_JOIN : LocalDateTimeline.JoinStyle.INNER_JOIN);

if (ytelseGrunnlag.getTilkommetInntektHensyntasFom().isPresent()) {
tidlinjeMedTilkommetAktivitet = tidlinjeMedTilkommetAktivitet.combine(new LocalDateSegment<>(new LocalDateInterval(ytelseGrunnlag.getTilkommetInntektHensyntasFom().get(), LocalDateInterval.TIDENES_ENDE), Boolean.TRUE), StandardCombinators::leftOnly, LocalDateTimeline.JoinStyle.INNER_JOIN);
tidlinjeMedTilkommetAktivitet = tidlinjeMedTilkommetAktivitet.intersection(new LocalDateInterval(ytelseGrunnlag.getTilkommetInntektHensyntasFom().get(), LocalDateInterval.TIDENES_ENDE));
} else if (!tidlinjeMedTilkommetAktivitet.isEmpty()) {
throw new IllegalStateException("Hadde ikke startdato for nye regler, men fikk tilkommet inntekt");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,8 @@ public static LocalDateTimeline<Set<StatusOgArbeidsgiver>> finnTilkommetInntekts
.union(dagpengetidslinje, StandardCombinators::union);

if (!ikkeFiltrerVedFulltFravær) {
var utbetalingTidslinje = finnTidslinjeMedFravær((UtbetalingsgradGrunnlag) utbetalingsgradGrunnlag);
// Filtrerer bort perioder som ligger utenfor søkte perioder
var utbetalingTidslinje = finnTidslinjeForUtbetalingsperiode((UtbetalingsgradGrunnlag) utbetalingsgradGrunnlag);
aktivitetTidslinje = aktivitetTidslinje.intersection(utbetalingTidslinje, StandardCombinators::leftOnly);
}
return aktivitetTidslinje.map(s -> mapTilkommetTidslinje(andelerFraStart, yrkesaktiviteter, utbetalingsgradGrunnlag, s, ikkeFiltrerVedFulltFravær)).compress();
Expand All @@ -106,12 +107,12 @@ private static LocalDateTimeline<Set<Inntektsforhold>> finnDagpengetidslinje(Inn
.collect(Collectors.collectingAndThen(Collectors.toList(), s -> new LocalDateTimeline<>(s, StandardCombinators::union)));
}

private static LocalDateTimeline<Boolean> finnTidslinjeMedFravær(UtbetalingsgradGrunnlag utbetalingsgradGrunnlag) {
private static LocalDateTimeline<Boolean> finnTidslinjeForUtbetalingsperiode(UtbetalingsgradGrunnlag utbetalingsgradGrunnlag) {
return utbetalingsgradGrunnlag.getUtbetalingsgradPrAktivitet().stream()
.flatMap(a -> a.getPeriodeMedUtbetalingsgrad().stream())
.filter(p -> p.getAktivitetsgrad().map(v -> v.compareTo(Aktivitetsgrad.HUNDRE) < 0).orElse(false))
.map(p -> new LocalDateSegment<>(p.getPeriode().getFomDato(), p.getPeriode().getTomDato(), Boolean.TRUE))
.collect(Collectors.collectingAndThen(Collectors.toList(), s -> new LocalDateTimeline<>(s, StandardCombinators::alwaysTrueForMatch)));
.map(p -> new LocalDateTimeline<>(p.getPeriode().getFomDato(), p.getPeriode().getTomDato(), true))
.reduce(LocalDateTimeline::crossJoin)
.orElse(LocalDateTimeline.empty());
}

private static List<LocalDateSegment<Set<StatusOgArbeidsgiver>>> mapTilkommetTidslinje(Collection<BeregningsgrunnlagPrStatusOgAndelDto> andeler,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,30 +104,6 @@ void skal_finne_tilkommet_andel_dersom_en_andel_fra_start_og_direkte_overgang_ut
assertThat(tilkomneAndeler.iterator().next().arbeidsgiver()).isEqualTo(arbeidsgiver2);
}

@Test
void skal_ikke_finne_tilkommet_andel_dersom_det_ikke_er_søkt_utbetalign_for_noen_aktiviteter() {

var arbeidsgiver = Arbeidsgiver.virksomhet(ARBEIDSGIVER_ORGNR);
var arbeidstakerandelFraStart = lagArbeidstakerandel(arbeidsgiver, 1L, AndelKilde.PROSESS_START, InternArbeidsforholdRefDto.nullRef());

var arbeidsgiver2 = Arbeidsgiver.virksomhet(ARBEIDSGIVER_ORGNR2);
var nyAndel = lagArbeidstakerandel(arbeidsgiver2, 2L, AndelKilde.PROSESS_PERIODISERING, InternArbeidsforholdRefDto.nullRef());

var yrkesaktivitet = lagYrkesaktivitet(arbeidsgiver, STP.minusMonths(10), STP.plusDays(15), InternArbeidsforholdRefDto.nullRef());
var nyYrkesaktivitet = lagYrkesaktivitet(arbeidsgiver2, STP.plusDays(1), STP.plusDays(20), InternArbeidsforholdRefDto.nullRef());

var utbetalingsgradFraStart = new UtbetalingsgradPrAktivitetDto(lagAktivitet(arbeidsgiver, InternArbeidsforholdRefDto.nullRef()), lagUtbetalingsgrader(0, STP.plusDays(2), STP.plusDays(3)));
var utbetalingsgradNyAndel = new UtbetalingsgradPrAktivitetDto(lagAktivitet(arbeidsgiver2, InternArbeidsforholdRefDto.nullRef()),
List.of(lagPeriodeMedUtbetalingsgrad(50, STP.plusDays(1), STP.plusDays(1)),
lagPeriodeMedUtbetalingsgrad(50, STP.plusDays(4), STP.plusDays(20))));

var periode = Intervall.fraOgMedTilOgMed(STP.plusDays(2), STP.plusDays(3));

var tilkommetAktivitet = finnTilkomneAndeler(periode, List.of(yrkesaktivitet, nyYrkesaktivitet), List.of(arbeidstakerandelFraStart, nyAndel), new PleiepengerSyktBarnGrunnlag(List.of(utbetalingsgradFraStart, utbetalingsgradNyAndel)), STP);

assertThat(tilkommetAktivitet.size()).isEqualTo(0);
}

@Test
void skal_finne_tilkommet_andel_dersom_en_andel_fra_start_med_overlapp_til_nytt_arbeid() {

Expand Down

0 comments on commit 4a42914

Please sign in to comment.