Skip to content

Commit 023bd33

Browse files
authored
TFP-5383 - fikset at vi håndterer overlappende permisjoner fra regist… (#2548)
TFP-5383 - fikset at vi håndterer overlappende permisjoner fra registre når vi skal finne relevante permisjoner i perioden vi ønsker informasjon om.
1 parent 0a444ab commit 023bd33

File tree

2 files changed

+60
-5
lines changed

2 files changed

+60
-5
lines changed

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/iay/tjeneste/dto/arbeidsforhold/ArbeidsforholdDtoTjeneste.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@
3131
import no.nav.foreldrepenger.abakus.typer.EksternArbeidsforholdRef;
3232
import no.nav.fpsak.tidsserie.LocalDateInterval;
3333
import no.nav.fpsak.tidsserie.LocalDateSegment;
34+
import no.nav.fpsak.tidsserie.LocalDateSegmentCombinator;
3435
import no.nav.fpsak.tidsserie.LocalDateTimeline;
36+
import no.nav.fpsak.tidsserie.StandardCombinators;
3537
import no.nav.vedtak.konfig.Tid;
3638

3739
import static no.nav.abakus.iaygrunnlag.kodeverk.PermisjonsbeskrivelseType.finnForKodeverkEiersKode;
@@ -103,21 +105,24 @@ private List<ArbeidsavtaleDto> mapArbeidsavtaler(Arbeidsforhold arbeidsforhold)
103105

104106
private List<PermisjonDto> mapPermisjoner(Arbeidsforhold arbeidsforhold) {
105107
var ansettelse = new LocalDateInterval(arbeidsforhold.getArbeidFom(), arbeidsforhold.getArbeidTom());
108+
106109
var permisjonTidslinje = arbeidsforhold.getPermisjoner().stream()
107110
.filter(permisjon -> permisjon.getPermisjonsprosent() != null)
108111
.map(p -> new LocalDateSegment<>(safeFom(p.getPermisjonFom()), safeTom(p.getPermisjonTom()),
109-
new PermisjonTidslinjeObjekt(p.getPermisjonsprosent(), p.getPermisjonsÅrsak())))
110-
.collect(Collectors.collectingAndThen(Collectors.toList(), LocalDateTimeline::new));
112+
List.of(new PermisjonTidslinjeObjekt(p.getPermisjonsprosent(), p.getPermisjonsÅrsak()))))
113+
.collect(Collectors.collectingAndThen(Collectors.toList(), datoSegmenter -> new LocalDateTimeline<>(datoSegmenter,
114+
StandardCombinators::concatLists)));
111115

112116
return permisjonTidslinje.intersection(ansettelse)
113117
.stream()
114118
.map(ArbeidsforholdDtoTjeneste::tilPermisjonDto)
119+
.flatMap(Collection::stream)
115120
.toList();
116121
}
117122

118-
private static PermisjonDto tilPermisjonDto(LocalDateSegment<PermisjonTidslinjeObjekt> s) {
119-
return new PermisjonDto(new Periode(s.getFom(), s.getTom()), finnForKodeverkEiersKode(s.getValue().permisjonsÅrsak))
120-
.medProsentsats(s.getValue().permisjonsprosent());
123+
private static List<PermisjonDto> tilPermisjonDto(LocalDateSegment<List<PermisjonTidslinjeObjekt>> s) {
124+
return s.getValue().stream().map(permisjon -> new PermisjonDto(new Periode(s.getFom(), s.getTom()), finnForKodeverkEiersKode(permisjon.permisjonsÅrsak()))
125+
.medProsentsats(permisjon.permisjonsprosent())).toList();
121126
}
122127

123128
private static LocalDate safeFom(LocalDate fom) {

domenetjenester/iay/src/test/java/no/nav/foreldrepenger/abakus/iay/tjeneste/dto/arbeidsforhold/ArbeidsforholdDtoTjenesteTest.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.math.BigDecimal;
99
import java.time.LocalDate;
1010
import java.util.Collections;
11+
import java.util.Comparator;
1112
import java.util.List;
1213
import java.util.Map;
1314
import java.util.Optional;
@@ -104,6 +105,55 @@ void mapArbeidsforholdMedPermisjoner() {
104105

105106
}
106107

108+
@Test
109+
void mapArbeidsforholdMedOverlappendePermisjoner() {
110+
111+
var personIdent = new PersonIdent("12345678");
112+
var aktørId = AktørId.dummy();
113+
var intervall = IntervallEntitet.fraOgMedTilOgMed(FRA_DATO, TIL_DATO);
114+
var eksternRef = EksternArbeidsforholdRef.ref("eksternRef");
115+
var orgnr = new OrgNummer(KUNSTIG_ORG);
116+
var arbeidsgiver = new Organisasjon(orgnr.getId());
117+
118+
var arbeidsgiverIdentifikator = new ArbeidsforholdIdentifikator(arbeidsgiver, eksternRef, ArbeidType.ORDINÆRT_ARBEIDSFORHOLD.getOffisiellKode());
119+
120+
var arbeidsavtalerTilMap = List.of(
121+
lagArbeidsavtale(FRA_DATO, FRA_DATO.plusWeeks(2).minusDays(1), BigDecimal.valueOf(30)),
122+
lagArbeidsavtale(FRA_DATO.plusWeeks(2), null, BigDecimal.valueOf(70))
123+
);
124+
var permisjonerTilMap = List.of(
125+
lagPermisjon(FRA_DATO, FRA_DATO.plusWeeks(1), BigDecimal.ZERO),
126+
lagPermisjon(FRA_DATO.plusDays(1), FRA_DATO.plusDays(5), BigDecimal.valueOf(100)),
127+
lagPermisjon(FRA_DATO.plusWeeks(2), Tid.TIDENES_ENDE, BigDecimal.valueOf(20))
128+
);
129+
var arbeidsforhold = List.of(lagArbeidsforhold(arbeidsgiver, arbeidsavtalerTilMap, permisjonerTilMap));
130+
131+
when(aktørConsumer.hentIdentForAktør(any())).thenReturn(Optional.of(personIdent));
132+
when(arbeidsforholdTjeneste.finnArbeidsforholdForIdentIPerioden(personIdent, aktørId, intervall )).thenReturn(Map.of(arbeidsgiverIdentifikator, arbeidsforhold));
133+
134+
var arbeidsforholdDto = arbeidsforholdDtoTjeneste.mapArbForholdOgPermisjoner(aktørId, FRA_DATO, TIL_DATO);
135+
136+
assertThat(arbeidsforholdDto).hasSize(1);
137+
assertThat(arbeidsforholdDto.getFirst().getType()).isEqualTo(ArbeidType.ORDINÆRT_ARBEIDSFORHOLD);
138+
assertThat(arbeidsforholdDto.getFirst().getArbeidsforholdId().getEksternReferanse()).isEqualTo(eksternRef.getReferanse());
139+
assertThat(arbeidsforholdDto.getFirst().getArbeidsgiver().getIdent()).isEqualTo(KUNSTIG_ORG);
140+
assertThat(arbeidsforholdDto.getFirst().getArbeidsavtaler()).hasSize(2);
141+
142+
var arbeidsavtaler = arbeidsforholdDto.getFirst().getArbeidsavtaler();
143+
assertThat(arbeidsavtaler.getFirst().periode().getFom()).isEqualTo(arbeidsavtalerTilMap.getFirst().getArbeidsavtaleFom());
144+
assertThat(arbeidsavtaler.getFirst().periode().getTom()).isEqualTo(arbeidsavtalerTilMap.getFirst().getArbeidsavtaleTom());
145+
assertThat(arbeidsavtaler.getFirst().stillingsprosent()).isEqualByComparingTo(arbeidsavtalerTilMap.getFirst().getStillingsprosent());
146+
assertThat(arbeidsavtaler.get(1).periode().getFom()).isEqualTo(arbeidsavtalerTilMap.get(1).getArbeidsavtaleFom());
147+
assertThat(arbeidsavtaler.get(1).periode().getTom()).isEqualTo(TIL_DATO);
148+
assertThat(arbeidsavtaler.get(1).stillingsprosent()).isEqualByComparingTo(arbeidsavtalerTilMap.get(1).getStillingsprosent());
149+
150+
var permisjoner = arbeidsforholdDto.getFirst().getPermisjoner();
151+
assertThat(permisjoner).hasSize(5);
152+
assertThat(permisjoner.getFirst().getPeriode().getFom()).isEqualTo(permisjonerTilMap.getFirst().getPermisjonFom());
153+
assertThat(permisjoner.get(4).getPeriode().getTom()).isEqualTo(TIL_DATO);
154+
155+
}
156+
107157
@Test
108158
void mapArbeidsforholdUtenPermisjoner() {
109159

0 commit comments

Comments
 (0)