Skip to content

Commit 0481b1f

Browse files
authored
TSFF-1073 Oppdater Kurs og reise for opplæringspenger (#483)
**Bakgrunn** Utformingen av den digitale søknaden for opplæringspenger fører til at Kursobjektet ser litt anerledes ut. Vi ønsker at objektene i k9-sak skal samsvare. **Endringer** - Trekker alt som har med reise ut fra `KursPerioder` og i det nye `Reise`-objektet. - Fjerner `KursPerioder` som nå kun inneholder perioder - Navn på kursholder må sendes inn fra søknaden så vi fjerner @deprecated og renamer til `navn` i stedet for `holder` - Tilpasser validering
1 parent 948f4ef commit 0481b1f

File tree

6 files changed

+100
-110
lines changed

6 files changed

+100
-110
lines changed

soknad/src/main/java/no/nav/k9/søknad/ytelse/olp/v1/OpplæringspengerYtelseValidator.java

+26-20
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import no.nav.k9.søknad.felles.type.Periode;
1919
import no.nav.k9.søknad.ytelse.Ytelse;
2020
import no.nav.k9.søknad.ytelse.YtelseValidator;
21-
import no.nav.k9.søknad.ytelse.olp.v1.kurs.KursPeriodeMedReisetid;
21+
import no.nav.k9.søknad.ytelse.olp.v1.kurs.Reise;
2222

2323
class OpplæringspengerYtelseValidator extends YtelseValidator {
2424

@@ -86,7 +86,7 @@ List<Feil> validerOgLeggTilFeilene(Opplæringspenger olp,
8686
feilene.addAll(validerAtIngenPerioderOverlapperMedTrekkKravPerioder(trekkKravPerioderTidslinje, søknadsperiodeTidslinje, "trekkKravPerioder"));
8787

8888
for (var ytelsePeriode : PerioderMedEndringUtil.getAllePerioderSomMåVæreInnenforSøknadsperiode(olp)) {
89-
if (ytelsePeriode.getPeriodeMap().keySet().stream().anyMatch(Periode::isTilOgMedFørFraOgMed)){
89+
if (ytelsePeriode.getPeriodeMap().keySet().stream().anyMatch(Periode::isTilOgMedFørFraOgMed)) {
9090
continue; //fortsette validering med ugyldige perioder gir bare duplikate feil
9191
}
9292
var ytelsePeriodeTidsserie = lagTidslinjeOgValider(ytelsePeriode.getPeriodeMap(), ytelsePeriode.getFelt() + ".perioder", feilene);
@@ -96,7 +96,8 @@ List<Feil> validerOgLeggTilFeilene(Opplæringspenger olp,
9696

9797
validerAtYtelsePeriodenErKomplettMedSøknad(søknadsperiodeTidslinje, olp.getUttak().getPerioder(), "uttak", feilene);
9898

99-
validerReisetidMotKursperioden(olp.getKurs().getKursperioder(), "kurs.kursperioder", feilene);
99+
validerReise(olp.getKurs().getReise(), "kurs.reise", feilene);
100+
validerReisetidMotKursperioden(olp.getKurs().getKursperioder(), olp.getKurs().getReise(), "kurs.reise", feilene);
100101

101102
return feilene;
102103
}
@@ -129,23 +130,28 @@ private List<Feil> validerAtYtelsePerioderErInnenforIntervalForEndring(LocalDate
129130
.collect(Collectors.toCollection(ArrayList::new)));
130131
}
131132

132-
private void validerReisetidMotKursperioden(List<KursPeriodeMedReisetid> kursperioder, String felt, List<Feil> feil) {
133-
for (KursPeriodeMedReisetid kursPeriode : kursperioder) {
134-
if (kursPeriode != null) {
135-
LocalDate avreise = kursPeriode.getAvreise();
136-
LocalDate hjemkomst = kursPeriode.getHjemkomst();
137-
Periode periode = kursPeriode.getPeriode();
138-
139-
if (avreise != null && hjemkomst != null && periode != null) {
140-
if (hjemkomst.isBefore(avreise)) {
141-
feil.add(toFeil(periode, felt, "ugyldigKursPeriode", "hjemkomst er før avreise: "));
142-
}
143-
if (avreise.isAfter(periode.getFraOgMed())) {
144-
feil.add(toFeil(periode, felt, "ugyldigKursPeriode", "avreise er etter kursstart: "));
145-
}
146-
if (hjemkomst.isBefore(periode.getTilOgMed())) {
147-
feil.add(toFeil(periode, felt, "ugyldigKursPeriode", "hjemkomst er før kursslutt: "));
148-
}
133+
private void validerReise(Reise reise, String felt, List<Feil> feilene) {
134+
if (reise.isReiserUtenforKursdager()) {
135+
if (reise.getReisedager() == null || reise.getReisedager().isEmpty()) {
136+
feilene.add(lagFeil(felt, "påkrevd", "Reisedager må inneholde minst en dag når reiserUtenforKursdager er satt."));
137+
}
138+
if (reise.getReisedagerBeskrivelse() == null) {
139+
feilene.add(lagFeil(felt, "påkrevd", "Beskrivelse må være satt når reiserUtenforKursdager er satt."));
140+
}
141+
}
142+
}
143+
144+
private void validerReisetidMotKursperioden(List<Periode> kursperioder, Reise reise, String felt, List<Feil> feil) {
145+
var reisedager = reise.getReisedager();
146+
if (reisedager == null || reisedager.isEmpty()) {
147+
return;
148+
}
149+
150+
// En reisedag må være innenfor en kursperiode
151+
for (LocalDate reisedag : reisedager) {
152+
if (reisedag != null) {
153+
if (kursperioder.stream().noneMatch(kursPeriode -> kursPeriode.inneholder(new Periode(reisedag, reisedag)))) {
154+
feil.add(lagFeil(felt, "ugyldigReise", "Reisedagen er ikke innenfor en kursperiode: " + reisedag));
149155
}
150156
}
151157
}

soknad/src/main/java/no/nav/k9/søknad/ytelse/olp/v1/kurs/Kurs.java

+14-3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.fasterxml.jackson.annotation.JsonAutoDetect;
1111
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
1212
import com.fasterxml.jackson.annotation.JsonProperty;
13+
import no.nav.k9.søknad.felles.type.Periode;
1314

1415
@JsonIgnoreProperties(ignoreUnknown = true)
1516
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE)
@@ -24,21 +25,31 @@ public class Kurs {
2425
@NotNull
2526
@Size(min = 1)
2627
@Valid
27-
private List<@NotNull @Valid KursPeriodeMedReisetid> kursperioder;
28+
private List<@NotNull @Valid Periode> kursperioder;
29+
30+
@JsonProperty(value = "reise", required = true)
31+
@NotNull
32+
@Valid
33+
private Reise reise;
2834

2935
public Kurs() {
3036
}
3137

32-
public Kurs(Kursholder kursholder, List<KursPeriodeMedReisetid> kursperioder) {
38+
public Kurs(Kursholder kursholder, List<Periode> kursperioder, Reise reise) {
3339
this.kursholder = kursholder;
3440
this.kursperioder = kursperioder;
41+
this.reise = reise;
3542
}
3643

3744
public Kursholder getKursholder() {
3845
return kursholder;
3946
}
4047

41-
public List<KursPeriodeMedReisetid> getKursperioder() {
48+
public List<Periode> getKursperioder() {
4249
return new ArrayList<>(kursperioder);
4350
}
51+
52+
public Reise getReise() {
53+
return reise;
54+
}
4455
}

soknad/src/main/java/no/nav/k9/søknad/ytelse/olp/v1/kurs/KursPeriodeMedReisetid.java

-75
This file was deleted.

soknad/src/main/java/no/nav/k9/søknad/ytelse/olp/v1/kurs/Kursholder.java

+6-9
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,11 @@
1414
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE)
1515
public class Kursholder {
1616

17-
@Deprecated(forRemoval = true)
18-
@JsonProperty(value = "holder")
17+
@JsonProperty(value = "navn")
1918
@Valid
2019
@Size(max = 100)
2120
@Pattern(regexp = "^[\\p{Pd}\\p{Graph}\\p{Space}\\p{Sc}\\p{L}\\p{M}\\p{N}§]*$", message = "[${validatedValue}] matcher ikke tillatt pattern [{regexp}]")
22-
private String holder;
21+
private String navn;
2322

2423
@JsonProperty(value = "institusjonsidentifikator", required = true)
2524
@Valid
@@ -32,15 +31,13 @@ public Kursholder(UUID institusjonUuid) {
3231
this.institusjonUuid = institusjonUuid;
3332
}
3433

35-
@Deprecated(forRemoval = true)
36-
public Kursholder(String holder, UUID institusjonUuid) {
37-
this.holder = holder;
34+
public Kursholder(String navn, UUID institusjonUuid) {
35+
this.navn = navn;
3836
this.institusjonUuid = institusjonUuid;
3937
}
4038

41-
@Deprecated(forRemoval = true)
42-
public String getHolder() {
43-
return holder;
39+
public String getNavn() {
40+
return navn;
4441
}
4542

4643
public UUID getInstitusjonUuid() {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package no.nav.k9.søknad.ytelse.olp.v1.kurs;
2+
3+
import com.fasterxml.jackson.annotation.JsonAutoDetect;
4+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
5+
import com.fasterxml.jackson.annotation.JsonProperty;
6+
import jakarta.validation.Valid;
7+
import jakarta.validation.constraints.NotNull;
8+
import jakarta.validation.constraints.Pattern;
9+
import jakarta.validation.constraints.Size;
10+
11+
import java.time.LocalDate;
12+
import java.util.List;
13+
14+
@JsonIgnoreProperties(ignoreUnknown = true)
15+
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE)
16+
public class Reise {
17+
@JsonProperty(value = "reiserUtenforKursdager", required = true)
18+
@NotNull
19+
@Valid
20+
private boolean reiserUtenforKursdager;
21+
22+
@JsonProperty(value="reisedager")
23+
@Valid
24+
private List<@NotNull @Valid LocalDate> reisedager;
25+
26+
@JsonProperty(value = "reisedagerBeskrivelse")
27+
@Size(max = 4000)
28+
@Pattern(regexp = "^[\\p{Pd}\\p{Graph}\\p{Space}\\p{Sc}\\p{L}\\p{M}\\p{N}§]*$", message = "[${validatedValue}] matcher ikke tillatt pattern [{regexp}]")
29+
private String reisedagerBeskrivelse;
30+
31+
public Reise() {
32+
}
33+
34+
public Reise(boolean reiserUtenforKursdager, List<LocalDate> reisedager, String reisedagerBeskrivelse) {
35+
this.reiserUtenforKursdager = reiserUtenforKursdager;
36+
this.reisedager = reisedager;
37+
this.reisedagerBeskrivelse = reisedagerBeskrivelse;
38+
}
39+
40+
public boolean isReiserUtenforKursdager() {
41+
return reiserUtenforKursdager;
42+
}
43+
44+
public List<LocalDate> getReisedager() {
45+
return reisedager;
46+
}
47+
48+
public String getReisedagerBeskrivelse() {
49+
return reisedagerBeskrivelse;
50+
}
51+
}

soknad/src/test/java/no/nav/k9/søknad/ytelse/olp/v1/OpplæringspengerYtelseValidatorTest.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
import no.nav.k9.søknad.felles.Feil;
1212
import no.nav.k9.søknad.felles.type.Periode;
1313
import no.nav.k9.søknad.ytelse.olp.v1.kurs.Kurs;
14-
import no.nav.k9.søknad.ytelse.olp.v1.kurs.KursPeriodeMedReisetid;
1514
import no.nav.k9.søknad.ytelse.olp.v1.kurs.Kursholder;
15+
import no.nav.k9.søknad.ytelse.olp.v1.kurs.Reise;
1616
import no.nav.k9.søknad.ytelse.psb.YtelseEksempel;
1717

1818
class OpplæringspengerYtelseValidatorTest {
@@ -21,8 +21,8 @@ class OpplæringspengerYtelseValidatorTest {
2121

2222
private Opplæringspenger lagYtelse() {
2323
Periode søknadsperiode = new Periode(LocalDate.now(), LocalDate.now().plusWeeks(1));
24-
KursPeriodeMedReisetid kursPeriode = new KursPeriodeMedReisetid(søknadsperiode, søknadsperiode.getFraOgMed(), søknadsperiode.getTilOgMed(), null, null);
25-
Kurs kurs = new Kurs(new Kursholder(UUID.randomUUID()), List.of(kursPeriode));
24+
Reise reise = new Reise(true, List.of(LocalDate.now()), "Langt å kjøre");
25+
Kurs kurs = new Kurs(new Kursholder(UUID.randomUUID()), List.of(søknadsperiode), reise);
2626
return new Opplæringspenger().medBarn(YtelseEksempel.lagBarn()).medSøknadsperiode(List.of(søknadsperiode)).medUttak(YtelseEksempel.lagUttak(søknadsperiode)).medKurs(kurs);
2727
}
2828

0 commit comments

Comments
 (0)