Skip to content

Commit 71eac63

Browse files
authored
Definerer søknadstype og validerer tom. dato på søknadsperiode. (#475)
* Definerer søknadstype og validerer tom. dato på søknadsperiode. Krever at tilOgMed dato er satt på søknadsperiode om søknadstype er RAPPORTERING_SØKNAD. Ellers kan tilOgMed dato være null. * Setter tidenes ende for deltakelsesøknad uten tom dato.
1 parent e3d46ee commit 71eac63

File tree

6 files changed

+70
-15
lines changed

6 files changed

+70
-15
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package no.nav.k9.søknad;
2+
3+
import java.time.LocalDate;
4+
import java.time.Month;
5+
6+
public final class TidUtils {
7+
8+
public static LocalDate TIDENES_ENDE = LocalDate.of(9999, Month.DECEMBER, 31);
9+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package no.nav.k9.søknad.ytelse.ung.v1;
2+
3+
public enum UngSøknadstype {
4+
DELTAKELSE_SØKNAD,
5+
RAPPORTERING_SØKNAD
6+
}

soknad/src/main/java/no/nav/k9/søknad/ytelse/ung/v1/Ungdomsytelse.java

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import jakarta.validation.constraints.DecimalMax;
77
import jakarta.validation.constraints.DecimalMin;
88
import jakarta.validation.constraints.NotNull;
9+
import no.nav.k9.søknad.TidUtils;
910
import no.nav.k9.søknad.felles.Feil;
1011
import no.nav.k9.søknad.felles.Versjon;
1112
import no.nav.k9.søknad.felles.type.Periode;
@@ -18,17 +19,18 @@
1819
import java.math.BigDecimal;
1920
import java.time.LocalDate;
2021
import java.util.ArrayList;
21-
import java.util.Collections;
2222
import java.util.List;
2323
import java.util.Objects;
2424

2525
public class Ungdomsytelse implements Ytelse {
2626

27+
private UngSøknadstype søknadType = UngSøknadstype.DELTAKELSE_SØKNAD;
28+
2729
@Valid
2830
@JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
2931
@JsonProperty(value = "søknadsperiode", required = true)
3032
@NotNull
31-
private List<@NotNull @GyldigPeriode(krevFomDato = true, krevTomDato = true) Periode> søknadsperiode = new ArrayList<>();
33+
private List<@NotNull @GyldigPeriode(krevFomDato = true) Periode> søknadsperiode = new ArrayList<>();
3234

3335
@JsonProperty(value = "inntekt")
3436
@DecimalMin("0.00")
@@ -84,6 +86,11 @@ public Person getAnnenPart() {
8486
.map(Periode::getFraOgMed)
8587
.min(LocalDate::compareTo)
8688
.orElseThrow();
89+
90+
if (søknadType == UngSøknadstype.DELTAKELSE_SØKNAD) {
91+
return new Periode(fom, TidUtils.TIDENES_ENDE); // Deltakelse har ingen sluttdato
92+
}
93+
8794
final var tom = perioder
8895
.stream()
8996
.map(Periode::getTilOgMed)
@@ -94,7 +101,12 @@ public Person getAnnenPart() {
94101
}
95102

96103
public List<Periode> getSøknadsperiodeList() {
97-
return søknadsperiode == null ? null : Collections.unmodifiableList(søknadsperiode);
104+
return søknadsperiode == null ? null : søknadsperiode.stream().map(p -> {
105+
if (p.getTilOgMed() == null) {
106+
return new Periode(p.getFraOgMed(), TidUtils.TIDENES_ENDE);
107+
}
108+
return p;
109+
}).toList();
98110
}
99111

100112
public BigDecimal getInntekt() {
@@ -116,4 +128,12 @@ public Ungdomsytelse medInntekt(BigDecimal inntekt) {
116128
return this;
117129
}
118130

131+
public UngSøknadstype getSøknadType() {
132+
return søknadType;
133+
}
134+
135+
public Ungdomsytelse medSøknadType(UngSøknadstype søknadType) {
136+
this.søknadType = Objects.requireNonNull(søknadType, "søknadType");
137+
return this;
138+
}
119139
}

soknad/src/main/java/no/nav/k9/søknad/ytelse/ung/v1/UngdomsytelseSøknadValidator.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package no.nav.k9.søknad.ytelse.ung.v1;
22

3-
import java.util.List;
4-
import java.util.stream.Collectors;
5-
63
import jakarta.validation.Validation;
74
import jakarta.validation.ValidatorFactory;
85
import no.nav.k9.søknad.Søknad;
@@ -11,13 +8,28 @@
118
import no.nav.k9.søknad.felles.type.Periode;
129
import no.nav.k9.søknad.felles.validering.AvbrytendeValideringsfeil;
1310

11+
import java.util.List;
12+
import java.util.stream.Collectors;
13+
1414
public class UngdomsytelseSøknadValidator extends SøknadValidator<Søknad> {
1515

1616
private static final ValidatorFactory VALIDATOR_FACTORY = Validation.buildDefaultValidatorFactory();
1717

1818
@Override
1919
public List<Feil> valider(Søknad søknad) {
20-
return validerSøknadsfelter(søknad);
20+
List<Feil> feil = validerSøknadsfelter(søknad);
21+
validerYtelse(søknad, feil);
22+
return feil;
23+
}
24+
25+
private List<Feil> validerYtelse(Søknad søknad, List<Feil> feil) {
26+
Ungdomsytelse ytelse = søknad.getYtelse();
27+
28+
if (ytelse.getSøknadType() == UngSøknadstype.RAPPORTERING_SØKNAD && ytelse.getSøknadsperiode().getTilOgMed() == null) {
29+
feil.add(new Feil("søknadsperiode.tilOgMed", PÅKREVD, "Rapporteringssøknad må ha en sluttdato"));
30+
}
31+
32+
return feil;
2133
}
2234

2335
public List<Feil> valider(Søknad søknad, List<Periode> gyldigeEndringsperioder) {
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
package no.nav.k9.søknad.ytelse.ung;
22

33
import no.nav.k9.søknad.felles.type.Periode;
4+
import no.nav.k9.søknad.ytelse.ung.v1.UngSøknadstype;
45
import no.nav.k9.søknad.ytelse.ung.v1.Ungdomsytelse;
56

67
import java.math.BigDecimal;
78

89
public class YtelseEksempel {
910

10-
public static Ungdomsytelse komplettYtelseMedSøknadsperiode(Periode søknadsperiode, BigDecimal inntekt) {
11+
public static Ungdomsytelse komplettYtelseMedSøknadsperiode(Periode søknadsperiode, BigDecimal inntekt, UngSøknadstype søknadstype) {
1112

1213
return new Ungdomsytelse()
1314
.medSøknadsperiode(søknadsperiode)
14-
.medInntekt(inntekt);
15+
.medInntekt(inntekt)
16+
.medSøknadType(søknadstype);
1517
}
1618
}

soknad/src/test/java/no/nav/k9/søknad/ytelse/ung/v1/ValideringTest.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import no.nav.k9.søknad.felles.type.Periode;
44
import no.nav.k9.søknad.ytelse.ung.SøknadEksempel;
55
import no.nav.k9.søknad.ytelse.ung.YtelseEksempel;
6-
import org.junit.jupiter.api.Assertions;
76
import org.junit.jupiter.api.Test;
87

98
import java.math.BigDecimal;
@@ -12,23 +11,30 @@
1211
class ValideringTest {
1312

1413
@Test
15-
void verifiserHentingAvSøknadsperiodeUtenTomDatoFeiler() {
14+
void verifiserHentingAvSøknadsperiodeUtenTomDatoIkkeFeiler() {
1615
var søknadsperiode = new Periode(LocalDate.now(), null);
17-
var ytelse = YtelseEksempel.komplettYtelseMedSøknadsperiode(søknadsperiode, BigDecimal.valueOf(1000));
18-
ValiderUtil.verifyHarFeil(SøknadEksempel.søknad(ytelse));
16+
var ytelse = YtelseEksempel.komplettYtelseMedSøknadsperiode(søknadsperiode, BigDecimal.valueOf(1000), UngSøknadstype.DELTAKELSE_SØKNAD);
17+
ValiderUtil.verifyIngenFeil(SøknadEksempel.søknad(ytelse));
1918
}
2019

2120
@Test
2221
void verifiserInntektUnderNullFeiler() {
2322
var søknadsperiode = new Periode(LocalDate.now(), LocalDate.now());
24-
var ytelse = YtelseEksempel.komplettYtelseMedSøknadsperiode(søknadsperiode, BigDecimal.valueOf(-1000));
23+
var ytelse = YtelseEksempel.komplettYtelseMedSøknadsperiode(søknadsperiode, BigDecimal.valueOf(-1000), UngSøknadstype.DELTAKELSE_SØKNAD);
2524
ValiderUtil.verifyHarFeil(SøknadEksempel.søknad(ytelse));
2625
}
2726

2827
@Test
2928
void verifiserInntektOverGrenseFeiler() {
3029
var søknadsperiode = new Periode(LocalDate.now(), LocalDate.now());
31-
var ytelse = YtelseEksempel.komplettYtelseMedSøknadsperiode(søknadsperiode, BigDecimal.valueOf(1000001.00));
30+
var ytelse = YtelseEksempel.komplettYtelseMedSøknadsperiode(søknadsperiode, BigDecimal.valueOf(1000001.00), UngSøknadstype.DELTAKELSE_SØKNAD);
31+
ValiderUtil.verifyHarFeil(SøknadEksempel.søknad(ytelse));
32+
}
33+
34+
@Test
35+
void verifiserSøknadPeriodeUtenTilOgMedForRapporteringssøknadFeiler() {
36+
var søknadsperiode = new Periode(LocalDate.now(), null);
37+
var ytelse = YtelseEksempel.komplettYtelseMedSøknadsperiode(søknadsperiode, BigDecimal.valueOf(1000), UngSøknadstype.RAPPORTERING_SØKNAD);
3238
ValiderUtil.verifyHarFeil(SøknadEksempel.søknad(ytelse));
3339
}
3440
}

0 commit comments

Comments
 (0)