Skip to content

Commit

Permalink
legg til bortfalte naturalytelser i InntektsmeldingDto
Browse files Browse the repository at this point in the history
  • Loading branch information
sirimykland committed Oct 24, 2024
1 parent be51231 commit 69d8740
Show file tree
Hide file tree
Showing 4 changed files with 100 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,23 @@
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;

import no.nav.foreldrepenger.behandlingslager.behandling.arbeidsforhold.ArbeidsforholdKomplettVurderingType;
import no.nav.foreldrepenger.domene.arbeidsforhold.impl.AksjonspunktÅrsak;
import no.nav.foreldrepenger.domene.iay.modell.NaturalYtelse;
import no.nav.foreldrepenger.domene.iay.modell.Refusjon;
import no.nav.foreldrepenger.domene.iay.modell.kodeverk.InntektsmeldingInnsendingsårsak;
import no.nav.foreldrepenger.domene.iay.modell.kodeverk.NaturalYtelseType;
import no.nav.foreldrepenger.domene.typer.Beløp;

import static no.nav.vedtak.konfig.Tid.TIDENES_ENDE;

public record InntektsmeldingDto(BigDecimal inntektPrMnd,
BigDecimal refusjonPrMnd,
Expand All @@ -28,8 +37,43 @@ public record InntektsmeldingDto(BigDecimal inntektPrMnd,
ArbeidsforholdKomplettVurderingType saksbehandlersVurdering,
String kildeSystem,
LocalDate startDatoPermisjon,
@Deprecated
List<NaturalYtelse> aktiveNaturalytelser,
List<Refusjon> refusjonsperioder,
InntektsmeldingInnsendingsårsak innsendingsårsak,
List<UUID> tilknyttedeBehandlingIder
){}
List<UUID> tilknyttedeBehandlingIder,
Map<NaturalYtelseType, List<BortfaltNaturalytelse>> bortfalteNaturalytelser) {

public record BortfaltNaturalytelse(LocalDate fom, LocalDate tom, Beløp beloepPerMnd) { }

public static Map<NaturalYtelseType, List<BortfaltNaturalytelse>> mapToBortfalteNaturalytelser(List<NaturalYtelse> aktiveNaturalytelser) {
Map<NaturalYtelseType, List<NaturalYtelse>> gruppertNaturalytelsePerioder = aktiveNaturalytelser.stream()
.collect(Collectors.groupingBy(NaturalYtelse::getType));

Map<NaturalYtelseType, List<BortfaltNaturalytelse>> bortfalteNaturalytelser = new HashMap<>();

gruppertNaturalytelsePerioder.forEach((ytelseType, aktiveNaturalytelserForType) -> {
List<NaturalYtelse> sortertePerioder = aktiveNaturalytelserForType.stream()
.sorted(Comparator.comparing(NaturalYtelse::getTom, Comparator.nullsLast(Comparator.naturalOrder()))
.thenComparing(NaturalYtelse::getFom, Comparator.nullsFirst(Comparator.naturalOrder())))
.toList();

var perioderMedBortfaltYtelse = new ArrayList<BortfaltNaturalytelse>();

for (int i = 0; i < sortertePerioder.size(); i++) {
NaturalYtelse currentPeriod = sortertePerioder.get(i);
NaturalYtelse nextPeriod = i + 1 < sortertePerioder.size() ? sortertePerioder.get(i + 1) : null;

if (!currentPeriod.getTom().equals(TIDENES_ENDE)) {
LocalDate nyFom = currentPeriod.getTom().plusDays(1);
LocalDate nyTom = nextPeriod != null ? nextPeriod.getFom().minusDays(1) : TIDENES_ENDE;

perioderMedBortfaltYtelse.add(new BortfaltNaturalytelse(nyFom, nyTom, currentPeriod.getBeloepPerMnd()));
}
}
bortfalteNaturalytelser.put(ytelseType, perioderMedBortfaltYtelse);
});

return bortfalteNaturalytelser;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,14 @@ public DatoIntervallEntitet getPeriode() {
return periode;
}

public LocalDate getFom() {
return periode.getFomDato();
}

public LocalDate getTom() {
return periode.getTomDato();
}

public Beløp getBeloepPerMnd() {
return beloepPerMnd;
}
Expand All @@ -66,8 +74,7 @@ public boolean equals(Object o) {
if (!(o instanceof NaturalYtelse that)) {
return false;
}
return Objects.equals(periode, that.periode) &&
Objects.equals(type, that.type);
return Objects.equals(periode, that.periode) && Objects.equals(type, that.type);
}

@Override
Expand All @@ -77,10 +84,6 @@ public int hashCode() {

@Override
public String toString() {
return "NaturalYtelseEntitet{" +
"periode=" + periode +
", beloepPerMnd=" + beloepPerMnd +
", type=" + type +
'}';
return "NaturalYtelseEntitet{" + "periode=" + periode + ", beloepPerMnd=" + beloepPerMnd + ", type=" + type + '}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package no.nav.foreldrepenger.domene.arbeidInntektsmelding.dto;

import no.nav.foreldrepenger.domene.iay.modell.NaturalYtelse;
import no.nav.foreldrepenger.domene.iay.modell.kodeverk.NaturalYtelseType;
import no.nav.foreldrepenger.domene.tid.DatoIntervallEntitet;
import no.nav.foreldrepenger.domene.typer.Beløp;

import org.junit.jupiter.api.Test;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

import static no.nav.vedtak.konfig.Tid.TIDENES_ENDE;
import static org.assertj.core.api.Assertions.assertThat;

class InntektsmeldingDtoTest {

@Test
void skal_regne_ut_bortfalte_naturalytelser_fra_aktiveNaturalytelser() {
var aktiveNaturalytelser = List.of(
new NaturalYtelse(DatoIntervallEntitet.fraOgMedTilOgMed(LocalDate.of(2020, 3, 2), LocalDate.of(2020, 10, 2)), BigDecimal.valueOf(1),
NaturalYtelseType.KOST_DAGER),
new NaturalYtelse(DatoIntervallEntitet.fraOgMed(LocalDate.of(2024, 3, 2)), BigDecimal.valueOf(3), NaturalYtelseType.KOST_DAGER),
new NaturalYtelse(DatoIntervallEntitet.fraOgMedTilOgMed(LocalDate.of(2021, 3, 2), LocalDate.of(2022, 5, 2)), BigDecimal.valueOf(4),
NaturalYtelseType.BIL),
new NaturalYtelse(DatoIntervallEntitet.fraOgMedTilOgMed(LocalDate.of(2022, 1, 2), LocalDate.of(2022, 12, 30)), BigDecimal.valueOf(2),
NaturalYtelseType.KOST_DAGER));

var res = InntektsmeldingDto.mapToBortfalteNaturalytelser(aktiveNaturalytelser);
assertThat(res).hasSize(2);
assertThat(res.get(NaturalYtelseType.KOST_DAGER)).hasSize(2);
assertThat(res.get(NaturalYtelseType.KOST_DAGER).getFirst()).isEqualTo(
new InntektsmeldingDto.BortfaltNaturalytelse(LocalDate.of(2020, 10, 3), LocalDate.of(2022, 1, 1), Beløp.fra(BigDecimal.ONE)));
assertThat(res.get(NaturalYtelseType.KOST_DAGER).get(1)).isEqualTo(
new InntektsmeldingDto.BortfaltNaturalytelse(LocalDate.of(2022, 12, 31), LocalDate.of(2024, 3, 1), Beløp.fra(BigDecimal.valueOf(2))));

assertThat(res.get(NaturalYtelseType.BIL).getFirst()).isEqualTo(
new InntektsmeldingDto.BortfaltNaturalytelse(LocalDate.of(2022, 5, 3), TIDENES_ENDE, Beløp.fra(BigDecimal.valueOf(4))));

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,8 @@ public static InntektsmeldingDto mapInntektsmelding(Inntektsmelding im,
im.getNaturalYtelser(),
refusjonsEndringer,
im.getInntektsmeldingInnsendingsårsak(),
tilknyttedeBehandlingIder != null ? tilknyttedeBehandlingIder : List.of()
tilknyttedeBehandlingIder != null ? tilknyttedeBehandlingIder : List.of(),
InntektsmeldingDto.mapToBortfalteNaturalytelser(im.getNaturalYtelser())
);
}

Expand Down

0 comments on commit 69d8740

Please sign in to comment.