Skip to content

Commit fd572a2

Browse files
authored
Støtte for å få lovbestemt ferie i sammenslåtte søknadsdata. (#345)
* Støtte for å få lovbestemt ferie i sammenslåtte søknadsdata.
1 parent 7e3c891 commit fd572a2

File tree

4 files changed

+153
-0
lines changed

4 files changed

+153
-0
lines changed

innsyn/src/main/java/no/nav/k9/innsyn/Søknadsammenslåer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import no.nav.fpsak.tidsserie.LocalDateTimeline;
99
import no.nav.fpsak.tidsserie.StandardCombinators;
1010
import no.nav.k9.innsyn.søknadsammeslåer.Arbeidstidsammenslåer;
11+
import no.nav.k9.innsyn.søknadsammeslåer.LovbestemtFeriesammenslåer;
1112
import no.nav.k9.innsyn.søknadsammeslåer.Tilsynsammenslåer;
1213
import no.nav.k9.søknad.Søknad;
1314
import no.nav.k9.søknad.TidsserieUtils;
@@ -74,6 +75,7 @@ private static Map<Periode, TilsynPeriodeInfo> hentUtTilsynsperioder(final Pleie
7475

7576
ytelse.medArbeidstid(Arbeidstidsammenslåer.slåSammenArbeidstid(s1Ytelse, s2Ytelse));
7677
ytelse.medTilsynsordning(Tilsynsammenslåer.slåsammen(s1Ytelse, s2Ytelse));
78+
ytelse.medLovbestemtFerie(LovbestemtFeriesammenslåer.slåsammen(s1Ytelse, s2Ytelse));
7779

7880
final Søknad s = new Søknad()
7981
.medSøknadId(SøknadId.of("generert"))
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package no.nav.k9.innsyn.søknadsammeslåer;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import java.util.Map.Entry;
6+
7+
import no.nav.k9.søknad.TidsserieUtils;
8+
import no.nav.k9.søknad.felles.type.Periode;
9+
import no.nav.k9.søknad.ytelse.psb.v1.LovbestemtFerie;
10+
import no.nav.k9.søknad.ytelse.psb.v1.LovbestemtFerie.LovbestemtFeriePeriodeInfo;
11+
import no.nav.k9.søknad.ytelse.psb.v1.PleiepengerSyktBarn;
12+
13+
public class LovbestemtFeriesammenslåer {
14+
15+
public static LovbestemtFerie slåsammen(PleiepengerSyktBarn s1Ytelse, PleiepengerSyktBarn s2Ytelse) {
16+
var s1Tidslinje = SøknadsammenslåerUtils.lagTidslinje(s1Ytelse.getLovbestemtFerie().getPerioder());
17+
18+
/*
19+
* Dette speiler workaround i k9-sak der vi nuller ut lovbestemt ferie når
20+
* denne inngår i en søknadsperiode (fremfor kun endringsperiode).
21+
*
22+
* Workarounden i k9-sak er der fordi brukerdialog ikke selv nuller ut
23+
* ferie ved innsending.
24+
*/
25+
final var s2Søknadsperioder = TidsserieUtils.toLocalDateTimeline(s2Ytelse.getSøknadsperiodeList());
26+
s1Tidslinje = s1Tidslinje.disjoint(s2Søknadsperioder);
27+
28+
final var s2Tidslinje = SøknadsammenslåerUtils.lagTidslinje(s2Ytelse.getLovbestemtFerie().getPerioder());
29+
30+
final Map<Periode, LovbestemtFeriePeriodeInfo> data = SøknadsammenslåerUtils.slåSammenOgHåndterTrukkedeKrav(s2Ytelse, s1Tidslinje, s2Tidslinje);
31+
return new LovbestemtFerie().medPerioder(medSkalHaFerieEksplisittSatt(data));
32+
}
33+
34+
/**
35+
* Støtte for å tolke manglende "skalHaFerie"-felt som true. Data fra søknadsdialogen blir
36+
* dessverre fortsatt sendt inn slik (og vi må uansett støtte historisk format etter at dette
37+
* har blitt endret).
38+
*/
39+
private static Map<Periode, LovbestemtFeriePeriodeInfo> medSkalHaFerieEksplisittSatt(Map<Periode, LovbestemtFeriePeriodeInfo> data) {
40+
final Map<Periode, LovbestemtFeriePeriodeInfo> resultatData = new HashMap<>();
41+
for (Entry<Periode, LovbestemtFeriePeriodeInfo> entry : data.entrySet()) {
42+
resultatData.put(entry.getKey(), new LovbestemtFeriePeriodeInfo().medSkalHaFerie(entry.getValue() == null || entry.getValue().isSkalHaFerie()));
43+
}
44+
return resultatData;
45+
}
46+
47+
}

innsyn/src/test/java/no/nav/k9/innsyn/SøknadsammenslåerTest.java

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import no.nav.k9.søknad.felles.type.Organisasjonsnummer;
2121
import no.nav.k9.søknad.felles.type.Periode;
2222
import no.nav.k9.søknad.felles.type.SøknadId;
23+
import no.nav.k9.søknad.ytelse.psb.v1.LovbestemtFerie;
24+
import no.nav.k9.søknad.ytelse.psb.v1.LovbestemtFerie.LovbestemtFeriePeriodeInfo;
2325
import no.nav.k9.søknad.ytelse.psb.v1.PleiepengerSyktBarn;
2426
import no.nav.k9.søknad.ytelse.psb.v1.arbeidstid.Arbeidstaker;
2527
import no.nav.k9.søknad.ytelse.psb.v1.arbeidstid.Arbeidstid;
@@ -241,6 +243,91 @@ public class SøknadsammenslåerTest {
241243
new TilsynPeriodeInfo().medEtablertTilsynTimerPerDag(Duration.ofHours(2).plusMinutes(30))
242244
));
243245
}
246+
247+
@Test
248+
public void kanSlåSammenLovbestemtFerieMedTomSøknad() {
249+
final Søknad søknad1 = lagGyldigSøknad();
250+
251+
final Søknad søknad2 = lagGyldigSøknad();
252+
final PleiepengerSyktBarn ytelse2 = søknad2.getYtelse();
253+
ytelse2.medLovbestemtFerie(new LovbestemtFerie().medPerioder(Map.of(
254+
new Periode(LocalDate.of(2021, 9, 25), LocalDate.of(2021, 12, 1)),
255+
new LovbestemtFeriePeriodeInfo().medSkalHaFerie(true)
256+
)));
257+
258+
final Søknad resultat = Søknadsammenslåer.slåSammen(søknad1, søknad2);
259+
final PleiepengerSyktBarn resultatYtelse = resultat.getYtelse();
260+
261+
assertResultet(resultatYtelse.getLovbestemtFerie().getPerioder(), Map.of(
262+
new Periode(LocalDate.of(2021, 9, 25), LocalDate.of(2021, 12, 1)),
263+
new LovbestemtFeriePeriodeInfo().medSkalHaFerie(true)
264+
));
265+
}
266+
267+
@Test
268+
public void kanSlåSammenLovbestemtFerieMedToSøknader() {
269+
final Søknad søknad1 = lagGyldigSøknad();
270+
final PleiepengerSyktBarn ytelse1 = søknad1.getYtelse();
271+
ytelse1.medLovbestemtFerie(new LovbestemtFerie().medPerioder(Map.of(
272+
new Periode(LocalDate.of(2021, 9, 25), LocalDate.of(2021, 12, 1)),
273+
new LovbestemtFeriePeriodeInfo().medSkalHaFerie(true)
274+
)));
275+
276+
final Søknad søknad2 = lagGyldigSøknad();
277+
final PleiepengerSyktBarn ytelse2 = søknad2.getYtelse();
278+
ytelse2.medLovbestemtFerie(new LovbestemtFerie().medPerioder(Map.of(
279+
new Periode(LocalDate.of(2021, 9, 25), LocalDate.of(2021, 9, 26)),
280+
new LovbestemtFeriePeriodeInfo().medSkalHaFerie(false),
281+
new Periode(LocalDate.of(2021, 9, 23), LocalDate.of(2021, 9, 24)),
282+
new LovbestemtFeriePeriodeInfo().medSkalHaFerie(true)
283+
)));
284+
285+
final Søknad resultat = Søknadsammenslåer.slåSammen(søknad1, søknad2);
286+
final PleiepengerSyktBarn resultatYtelse = resultat.getYtelse();
287+
288+
assertResultet(resultatYtelse.getLovbestemtFerie().getPerioder(), Map.of(
289+
new Periode(LocalDate.of(2021, 9, 23), LocalDate.of(2021, 9, 24)),
290+
new LovbestemtFeriePeriodeInfo().medSkalHaFerie(true),
291+
new Periode(LocalDate.of(2021, 9, 25), LocalDate.of(2021, 9, 26)),
292+
new LovbestemtFeriePeriodeInfo().medSkalHaFerie(false),
293+
new Periode(LocalDate.of(2021, 9, 27), LocalDate.of(2021, 12, 1)),
294+
new LovbestemtFeriePeriodeInfo().medSkalHaFerie(true)
295+
));
296+
}
297+
298+
@Test
299+
public void kanSlåSammenLovbestemtFerieMedSøknadsperiodeutnulling() {
300+
final Søknad søknad1 = lagGyldigSøknad();
301+
final PleiepengerSyktBarn ytelse1 = søknad1.getYtelse();
302+
ytelse1.medLovbestemtFerie(new LovbestemtFerie().medPerioder(Map.of(
303+
new Periode(LocalDate.of(2021, 9, 25), LocalDate.of(2021, 12, 1)),
304+
new LovbestemtFeriePeriodeInfo().medSkalHaFerie(true)
305+
)));
306+
307+
final Søknad søknad2 = lagGyldigSøknad();
308+
final PleiepengerSyktBarn ytelse2 = søknad2.getYtelse();
309+
ytelse2.medLovbestemtFerie(new LovbestemtFerie().medPerioder(Map.of(
310+
new Periode(LocalDate.of(2021, 9, 25), LocalDate.of(2021, 9, 26)),
311+
new LovbestemtFeriePeriodeInfo().medSkalHaFerie(false),
312+
new Periode(LocalDate.of(2021, 9, 23), LocalDate.of(2021, 9, 24)),
313+
new LovbestemtFeriePeriodeInfo().medSkalHaFerie(true)
314+
)));
315+
ytelse2.medSøknadsperiode(new Periode(LocalDate.of(2021, 10, 2), LocalDate.of(2021, 10, 3)));
316+
317+
final Søknad resultat = Søknadsammenslåer.slåSammen(søknad1, søknad2);
318+
final PleiepengerSyktBarn resultatYtelse = resultat.getYtelse();
319+
320+
assertResultet(resultatYtelse.getLovbestemtFerie().getPerioder(), Map.of(
321+
new Periode(LocalDate.of(2021, 9, 23), LocalDate.of(2021, 9, 24)),
322+
new LovbestemtFeriePeriodeInfo().medSkalHaFerie(true),
323+
new Periode(LocalDate.of(2021, 9, 25), LocalDate.of(2021, 9, 26)),
324+
new LovbestemtFeriePeriodeInfo().medSkalHaFerie(false),
325+
new Periode(LocalDate.of(2021, 9, 27), LocalDate.of(2021, 10, 1)),
326+
new LovbestemtFeriePeriodeInfo().medSkalHaFerie(true),
327+
new Periode(LocalDate.of(2021, 10, 4), LocalDate.of(2021, 12, 1)),
328+
new LovbestemtFeriePeriodeInfo().medSkalHaFerie(true)
329+
));
330+
}
244331

245332
private List<Arbeidstaker> sortertArbeidstakere(final PleiepengerSyktBarn resultatYtelse) {
246333
return resultatYtelse.getArbeidstid()

soknad/src/main/java/no/nav/k9/søknad/ytelse/psb/v1/LovbestemtFerie.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,23 @@ public LovbestemtFeriePeriodeInfo medSkalHaFerie(Boolean skalHaFerie) {
6464
public Boolean isSkalHaFerie() {
6565
return skalHaFerie == null || skalHaFerie;
6666
}
67+
68+
@Override
69+
public int hashCode() {
70+
return Objects.hash(skalHaFerie);
71+
}
72+
73+
@Override
74+
public boolean equals(Object obj) {
75+
if (this == obj)
76+
return true;
77+
if (obj == null)
78+
return false;
79+
if (getClass() != obj.getClass())
80+
return false;
81+
LovbestemtFeriePeriodeInfo other = (LovbestemtFeriePeriodeInfo) obj;
82+
return Objects.equals(skalHaFerie, other.skalHaFerie);
83+
}
6784
}
6885

6986
}

0 commit comments

Comments
 (0)