Skip to content

Commit

Permalink
TSFF-1073 Oppdater Kurs og reise for opplæringspenger (#483)
Browse files Browse the repository at this point in the history
**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
  • Loading branch information
mortenoosvik authored Jan 27, 2025
1 parent 948f4ef commit 0481b1f
Show file tree
Hide file tree
Showing 6 changed files with 100 additions and 110 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import no.nav.k9.søknad.felles.type.Periode;
import no.nav.k9.søknad.ytelse.Ytelse;
import no.nav.k9.søknad.ytelse.YtelseValidator;
import no.nav.k9.søknad.ytelse.olp.v1.kurs.KursPeriodeMedReisetid;
import no.nav.k9.søknad.ytelse.olp.v1.kurs.Reise;

class OpplæringspengerYtelseValidator extends YtelseValidator {

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

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

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

validerReisetidMotKursperioden(olp.getKurs().getKursperioder(), "kurs.kursperioder", feilene);
validerReise(olp.getKurs().getReise(), "kurs.reise", feilene);
validerReisetidMotKursperioden(olp.getKurs().getKursperioder(), olp.getKurs().getReise(), "kurs.reise", feilene);

return feilene;
}
Expand Down Expand Up @@ -129,23 +130,28 @@ private List<Feil> validerAtYtelsePerioderErInnenforIntervalForEndring(LocalDate
.collect(Collectors.toCollection(ArrayList::new)));
}

private void validerReisetidMotKursperioden(List<KursPeriodeMedReisetid> kursperioder, String felt, List<Feil> feil) {
for (KursPeriodeMedReisetid kursPeriode : kursperioder) {
if (kursPeriode != null) {
LocalDate avreise = kursPeriode.getAvreise();
LocalDate hjemkomst = kursPeriode.getHjemkomst();
Periode periode = kursPeriode.getPeriode();

if (avreise != null && hjemkomst != null && periode != null) {
if (hjemkomst.isBefore(avreise)) {
feil.add(toFeil(periode, felt, "ugyldigKursPeriode", "hjemkomst er før avreise: "));
}
if (avreise.isAfter(periode.getFraOgMed())) {
feil.add(toFeil(periode, felt, "ugyldigKursPeriode", "avreise er etter kursstart: "));
}
if (hjemkomst.isBefore(periode.getTilOgMed())) {
feil.add(toFeil(periode, felt, "ugyldigKursPeriode", "hjemkomst er før kursslutt: "));
}
private void validerReise(Reise reise, String felt, List<Feil> feilene) {
if (reise.isReiserUtenforKursdager()) {
if (reise.getReisedager() == null || reise.getReisedager().isEmpty()) {
feilene.add(lagFeil(felt, "påkrevd", "Reisedager må inneholde minst en dag når reiserUtenforKursdager er satt."));
}
if (reise.getReisedagerBeskrivelse() == null) {
feilene.add(lagFeil(felt, "påkrevd", "Beskrivelse må være satt når reiserUtenforKursdager er satt."));
}
}
}

private void validerReisetidMotKursperioden(List<Periode> kursperioder, Reise reise, String felt, List<Feil> feil) {
var reisedager = reise.getReisedager();
if (reisedager == null || reisedager.isEmpty()) {
return;
}

// En reisedag må være innenfor en kursperiode
for (LocalDate reisedag : reisedager) {
if (reisedag != null) {
if (kursperioder.stream().noneMatch(kursPeriode -> kursPeriode.inneholder(new Periode(reisedag, reisedag)))) {
feil.add(lagFeil(felt, "ugyldigReise", "Reisedagen er ikke innenfor en kursperiode: " + reisedag));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import no.nav.k9.søknad.felles.type.Periode;

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE)
Expand All @@ -24,21 +25,31 @@ public class Kurs {
@NotNull
@Size(min = 1)
@Valid
private List<@NotNull @Valid KursPeriodeMedReisetid> kursperioder;
private List<@NotNull @Valid Periode> kursperioder;

@JsonProperty(value = "reise", required = true)
@NotNull
@Valid
private Reise reise;

public Kurs() {
}

public Kurs(Kursholder kursholder, List<KursPeriodeMedReisetid> kursperioder) {
public Kurs(Kursholder kursholder, List<Periode> kursperioder, Reise reise) {
this.kursholder = kursholder;
this.kursperioder = kursperioder;
this.reise = reise;
}

public Kursholder getKursholder() {
return kursholder;
}

public List<KursPeriodeMedReisetid> getKursperioder() {
public List<Periode> getKursperioder() {
return new ArrayList<>(kursperioder);
}

public Reise getReise() {
return reise;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,11 @@
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE)
public class Kursholder {

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

@JsonProperty(value = "institusjonsidentifikator", required = true)
@Valid
Expand All @@ -32,15 +31,13 @@ public Kursholder(UUID institusjonUuid) {
this.institusjonUuid = institusjonUuid;
}

@Deprecated(forRemoval = true)
public Kursholder(String holder, UUID institusjonUuid) {
this.holder = holder;
public Kursholder(String navn, UUID institusjonUuid) {
this.navn = navn;
this.institusjonUuid = institusjonUuid;
}

@Deprecated(forRemoval = true)
public String getHolder() {
return holder;
public String getNavn() {
return navn;
}

public UUID getInstitusjonUuid() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package no.nav.k9.søknad.ytelse.olp.v1.kurs;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;

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

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.NONE, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE, isGetterVisibility = JsonAutoDetect.Visibility.NONE, creatorVisibility = JsonAutoDetect.Visibility.NONE)
public class Reise {
@JsonProperty(value = "reiserUtenforKursdager", required = true)
@NotNull
@Valid
private boolean reiserUtenforKursdager;

@JsonProperty(value="reisedager")
@Valid
private List<@NotNull @Valid LocalDate> reisedager;

@JsonProperty(value = "reisedagerBeskrivelse")
@Size(max = 4000)
@Pattern(regexp = "^[\\p{Pd}\\p{Graph}\\p{Space}\\p{Sc}\\p{L}\\p{M}\\p{N}§]*$", message = "[${validatedValue}] matcher ikke tillatt pattern [{regexp}]")
private String reisedagerBeskrivelse;

public Reise() {
}

public Reise(boolean reiserUtenforKursdager, List<LocalDate> reisedager, String reisedagerBeskrivelse) {
this.reiserUtenforKursdager = reiserUtenforKursdager;
this.reisedager = reisedager;
this.reisedagerBeskrivelse = reisedagerBeskrivelse;
}

public boolean isReiserUtenforKursdager() {
return reiserUtenforKursdager;
}

public List<LocalDate> getReisedager() {
return reisedager;
}

public String getReisedagerBeskrivelse() {
return reisedagerBeskrivelse;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
import no.nav.k9.søknad.felles.Feil;
import no.nav.k9.søknad.felles.type.Periode;
import no.nav.k9.søknad.ytelse.olp.v1.kurs.Kurs;
import no.nav.k9.søknad.ytelse.olp.v1.kurs.KursPeriodeMedReisetid;
import no.nav.k9.søknad.ytelse.olp.v1.kurs.Kursholder;
import no.nav.k9.søknad.ytelse.olp.v1.kurs.Reise;
import no.nav.k9.søknad.ytelse.psb.YtelseEksempel;

class OpplæringspengerYtelseValidatorTest {
Expand All @@ -21,8 +21,8 @@ class OpplæringspengerYtelseValidatorTest {

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

Expand Down

0 comments on commit 0481b1f

Please sign in to comment.