Skip to content

Commit 7a3019d

Browse files
espennavtendestad
andauthored
Legg til trekk av perioder for PPN (#246)
* Legg til trekk av perioder for PPN * Små endringer i code review Co-authored-by: Tore Langedal Endestad <[email protected]>
1 parent 8a1e0d1 commit 7a3019d

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

soknad/src/main/java/no/nav/k9/søknad/ytelse/pls/v1/PleiepengerLivetsSluttfaseYtelseValidator.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package no.nav.k9.søknad.ytelse.pls.v1;
22

3+
import static no.nav.k9.søknad.TidsserieUtils.tilPeriodeList;
34
import static no.nav.k9.søknad.TidsserieUtils.toLocalDateTimeline;
45

56
import java.util.ArrayList;
67
import java.util.List;
78
import java.util.Map;
9+
import java.util.stream.Collectors;
810

911
import no.nav.fpsak.tidsserie.LocalDateTimeline;
1012
import no.nav.k9.søknad.felles.Feil;
@@ -34,6 +36,7 @@ public List<Feil> valider(PleipengerLivetsSluttfase søknad) {
3436
feilene.addAll(validerPerioderErLukketOgGyldig(søknad.getUtenlandsopphold().getPerioderSomSkalSlettes(), "utenlandsopphold.perioderSomSkalSlettes"));
3537
validerArbeidstid(søknad);
3638
validerOpptjening(søknad, feilene);
39+
validerTrekkKravPerioder(søknad, feilene);
3740
} catch (ValideringsAvbrytendeFeilException valideringsAvbrytendeFeilException) {
3841
feilene.addAll(valideringsAvbrytendeFeilException.getFeilList());
3942
}
@@ -66,6 +69,13 @@ private void validerOpptjening(PleipengerLivetsSluttfase søknad, List<Feil> fei
6669

6770
}
6871

72+
private void validerTrekkKravPerioder(PleipengerLivetsSluttfase søknad, List<Feil> feilene) {
73+
LocalDateTimeline<Boolean> trekkKravPerioderTidslinje = lagTidslinjeOgValider(søknad.getTrekkKravPerioder(), "trekkKravPerioder.perioder", feilene);
74+
var søktePerioder = søknad.getArbeidstid().getArbeidstakerList().stream().flatMap(it -> it.getArbeidstidInfo().getPerioder().keySet().stream()).collect(Collectors.toList());
75+
var tidslinjeSøktPeriode = toLocalDateTimeline(søktePerioder);
76+
feilene.addAll(validerAtIngenPerioderOverlapperMedTrekkKravPerioder(trekkKravPerioderTidslinje, tidslinjeSøktPeriode, "trekkKravPerioder"));
77+
}
78+
6979
private LocalDateTimeline<Boolean> lagTidslinjeMedStøtteForÅpenPeriodeOgValider(Map<Periode, ?> periodeMap, String felt) throws ValideringsAvbrytendeFeilException {
7080
return lagTidslinjeOgValider(periodeMap, felt, true);
7181
}
@@ -89,6 +99,33 @@ private LocalDateTimeline<Boolean> lagTidslinjeOgValider(Map<Periode, ?> periode
8999
}
90100
}
91101

102+
private LocalDateTimeline<Boolean> lagTidslinjeOgValider(List<Periode> periodeList, String felt, List<Feil> feil) throws ValideringsAvbrytendeFeilException {
103+
var nyFeil = validerPerioderErLukketOgGyldig(periodeList, felt);
104+
if (!nyFeil.isEmpty()) {
105+
feil.addAll(nyFeil);
106+
throw new ValideringsAvbrytendeFeilException(feil);
107+
}
108+
try {
109+
return toLocalDateTimeline(periodeList);
110+
} catch (IllegalArgumentException e) {
111+
feil.add(lagFeil(felt, "IllegalArgumentException", e.getMessage()));
112+
throw new ValideringsAvbrytendeFeilException(feil);
113+
}
114+
}
115+
116+
private List<Feil> validerPerioderErLukketOgGyldig(List<Periode> periodeList, String felt) {
117+
var feil = new ArrayList<Feil>();
118+
for (int i = 0; i < periodeList.size(); i++ ) {
119+
var periode = periodeList.get(i);
120+
if (periode != null) {
121+
validerPerioderErLukket(periode, felt + "[" + i + "]", feil);
122+
validerPerioderIkkeErInvertert(periode, felt + "[" + i + "]", feil);
123+
}
124+
}
125+
return feil;
126+
}
127+
128+
92129
private List<Feil> validerPerioderErLukketOgGyldig(Map<Periode, ?> perioder, String felt) {
93130
var feil = new ArrayList<Feil>();
94131
perioder.keySet().forEach(p -> {
@@ -119,6 +156,18 @@ private void validerPerioderIkkeErInvertert(Periode periode, String felt, List<F
119156
}
120157
}
121158

159+
private List<Feil> validerAtIngenPerioderOverlapperMedTrekkKravPerioder(LocalDateTimeline<Boolean> trekkKravPerioder,
160+
LocalDateTimeline<Boolean> søktePerioder,
161+
String felt) {
162+
return tilPeriodeList(trekkKravPerioder.intersection(søktePerioder)).stream()
163+
.map(p -> toFeil(p, felt, "ugyldigPeriodeInterval", "Søkt periode overlapper med trekk krav periode: "))
164+
.collect(Collectors.toCollection(ArrayList::new));
165+
}
166+
167+
private Feil toFeil(Periode periode, String felt, String feilkode, String feilmelding) {
168+
return lagFeil(felt, feilkode, feilmelding + periode.toString());
169+
}
170+
122171
private Feil lagFeil(String felt, String feilkode, String feilmelding) {
123172
return new Feil("ytelse." + felt, feilkode, feilmelding);
124173
}

soknad/src/main/java/no/nav/k9/søknad/ytelse/pls/v1/PleipengerLivetsSluttfase.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.time.LocalDate;
44
import java.util.ArrayList;
5+
import java.util.Collections;
56
import java.util.Comparator;
67
import java.util.List;
78
import java.util.Objects;
@@ -42,6 +43,11 @@ public class PleipengerLivetsSluttfase implements Ytelse {
4243
@JsonProperty(value = "arbeidstid", required = true)
4344
private Arbeidstid arbeidstid = new Arbeidstid();
4445

46+
@Valid
47+
@JsonProperty(value = "trekkKravPerioder", required = true)
48+
@NotNull
49+
private List<Periode> trekkKravPerioder = new ArrayList<>();
50+
4551
@Valid
4652
@JsonProperty(value = "opptjeningAktivitet")
4753
private OpptjeningAktivitet opptjeningAktivitet = new OpptjeningAktivitet();
@@ -121,6 +127,10 @@ public Utenlandsopphold getUtenlandsopphold() {
121127
return utenlandsopphold;
122128
}
123129

130+
public List<Periode> getTrekkKravPerioder() {
131+
return Collections.unmodifiableList(trekkKravPerioder);
132+
}
133+
124134
public PleipengerLivetsSluttfase medPleietrengende(Pleietrengende pleietrengende) {
125135
this.pleietrengende = Objects.requireNonNull(pleietrengende, "pleietrengende");
126136
return this;
@@ -145,4 +155,9 @@ public PleipengerLivetsSluttfase medUtenlandsopphold(Utenlandsopphold utenlandso
145155
this.utenlandsopphold = Objects.requireNonNull(utenlandsopphold, "utenlandsopphold");
146156
return this;
147157
}
158+
159+
public PleipengerLivetsSluttfase leggTilTrekkKravPerioder(List<Periode> trekkKravPerioder) {
160+
this.trekkKravPerioder.addAll(Objects.requireNonNull(trekkKravPerioder, "trekkKravPerioder"));
161+
return this;
162+
}
148163
}

0 commit comments

Comments
 (0)