Skip to content

Commit 4f6fa1f

Browse files
authored
Utvider fraværperiode med fraværårsak og legger på sluttdato på frilanser. (#120)
* Utvider fraværperiode med fraværårsak. * Legger på sluttdato på frilanser og validerer på felter. * Fikser tester * Markerer frilanser builder som deprecated og bruker constructor. Legger også til setter metoder med chaining for bedre lesbarhet.
1 parent 413efe8 commit 4f6fa1f

File tree

10 files changed

+351
-12
lines changed

10 files changed

+351
-12
lines changed

soknad-omsorgspenger-utbetaling/src/test/java/no/nav/k9/søknad/omsorgspenger/utbetaling/snf/TestUtils.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ class TestUtils {
8080
))
8181
.frilanser(Frilanser.builder()
8282
.startdato(LocalDate.parse("2019-01-01"))
83+
.sluttdato(LocalDate.parse("2020-01-01"))
8384
.jobberFortsattSomFrilans(false)
8485
.build())
8586
.søker(Søker.builder()

soknad-omsorgspenger-utbetaling/src/test/resources/snf/komplett-søknad.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
}],
3434
"frilanser": {
3535
"startdato": "2019-01-01",
36+
"sluttdato": "2020-01-01",
3637
"jobberFortsattSomFrilans": false
3738
}
3839
}

soknad/src/main/java/no/nav/k9/søknad/felles/aktivitet/Frilanser.java

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.fasterxml.jackson.annotation.JsonCreator;
55
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
66
import com.fasterxml.jackson.annotation.JsonProperty;
7+
import com.fasterxml.jackson.databind.util.ClassUtil;
78

89
import javax.validation.constraints.NotNull;
910
import java.time.LocalDate;
@@ -14,35 +15,63 @@ public class Frilanser {
1415

1516
@JsonProperty(value = "startdato")
1617
@NotNull
17-
private final LocalDate startdato;
18+
private LocalDate startdato;
19+
20+
@JsonProperty(value = "sluttdato")
21+
private LocalDate sluttdato;
1822

1923
@JsonProperty(value = "jobberFortsattSomFrilans")
20-
private final Boolean jobberFortsattSomFrilans;
24+
private Boolean jobberFortsattSomFrilans;
2125

26+
/**@deprecated brukt ctor.*/
27+
@Deprecated(forRemoval = true)
2228
public static Frilanser.Builder builder() {
2329
return new Frilanser.Builder();
2430
}
2531

32+
public Frilanser() {}
33+
2634
@JsonCreator
2735
public Frilanser(
2836
@JsonProperty("startdato") LocalDate startdato,
37+
@JsonProperty("sluttdato") LocalDate sluttdato,
2938
@JsonProperty("jobberFortsattSomFrilans") Boolean jobberFortsattSomFrilans) {
3039
this.startdato = startdato;
40+
this.sluttdato = sluttdato;
3141
this.jobberFortsattSomFrilans = jobberFortsattSomFrilans;
3242
}
43+
44+
public Frilanser medStartDato(LocalDate startdato) {
45+
this.startdato = startdato;
46+
return this;
47+
}
48+
49+
public Frilanser medSluttDato(LocalDate sluttdato) {
50+
this.sluttdato = sluttdato;
51+
return this;
52+
}
53+
54+
public Frilanser medJobberFortsattSomFrilans(Boolean jobberFortsattSomFrilans) {
55+
this.jobberFortsattSomFrilans = jobberFortsattSomFrilans;
56+
return this;
57+
}
3358

3459
public LocalDate getStartdato() {
3560
return startdato;
3661
}
37-
62+
public LocalDate getSluttdato() { return sluttdato; }
3863
public Boolean getJobberFortsattSomFrilans() {
3964
return jobberFortsattSomFrilans;
4065
}
4166

67+
/**@deprecated brukt ctor.*/
68+
@Deprecated(forRemoval = true)
4269
public static final class Builder {
4370
private LocalDate startdato;
71+
private LocalDate sluttdato;
4472
private Boolean jobberFortsattSomFrilans;
4573

74+
4675
private Builder() {
4776
}
4877

@@ -51,13 +80,18 @@ public Builder startdato(LocalDate startdato) {
5180
return this;
5281
}
5382

83+
public Builder sluttdato(LocalDate sluttdato) {
84+
this.sluttdato = sluttdato;
85+
return this;
86+
}
87+
5488
public Frilanser.Builder jobberFortsattSomFrilans(Boolean jobberFortsattSomFrilans) {
5589
this.jobberFortsattSomFrilans = jobberFortsattSomFrilans;
5690
return this;
5791
}
5892

5993
public Frilanser build() {
60-
return new Frilanser(startdato, jobberFortsattSomFrilans);
94+
return new Frilanser(startdato, sluttdato, jobberFortsattSomFrilans);
6195
}
6296
}
6397
}

soknad/src/main/java/no/nav/k9/søknad/felles/fravær/FraværPeriode.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.Objects;
55

66
import javax.validation.Valid;
7+
import javax.validation.constraints.NotNull;
78

89
import com.fasterxml.jackson.annotation.JsonAutoDetect;
910
import com.fasterxml.jackson.annotation.JsonCreator;
@@ -22,10 +23,19 @@ public class FraværPeriode implements Comparable<FraværPeriode> {
2223
@JsonProperty("duration")
2324
private final Duration duration;
2425

26+
@NotNull
27+
@JsonProperty(value = "årsak", required = true)
28+
private final FraværÅrsak årsak;
29+
2530
@JsonCreator
26-
public FraværPeriode(@JsonProperty("periode") @Valid Periode periode, @JsonProperty("duration") Duration duration) {
31+
public FraværPeriode(
32+
@JsonProperty("periode") @Valid Periode periode,
33+
@JsonProperty("duration") Duration duration,
34+
@JsonProperty("årsak") FraværÅrsak årsak
35+
) {
2736
this.periode = periode;
2837
this.duration = duration;
38+
this.årsak = årsak;
2939
}
3040

3141
public Periode getPeriode() {
@@ -36,30 +46,34 @@ public Duration getDuration() {
3646
return duration;
3747
}
3848

49+
public FraværÅrsak getÅrsak() { return årsak; }
50+
3951
@Override
4052
public boolean equals(Object o) {
4153
if (this == o) return true;
4254
if (o == null || getClass() != o.getClass()) return false;
4355
FraværPeriode that = (FraværPeriode) o;
4456
return periode.equals(that.periode) &&
45-
Objects.equals(duration, that.duration);
57+
Objects.equals(duration, that.duration) &&
58+
Objects.equals(årsak, that.årsak);
4659
}
4760

4861
@Override
4962
public int hashCode() {
50-
return Objects.hash(periode, duration);
63+
return Objects.hash(periode, duration, årsak);
5164
}
5265

5366
@Override
5467
public int compareTo(FraværPeriode b) {
5568
return this.getPeriode().compareTo(b.getPeriode());
5669
}
57-
70+
5871
@Override
5972
public String toString() {
6073
return "FraværPeriode{" +
6174
"periode=" + periode +
6275
", duration=" + duration +
76+
", årsak=" + årsak +
6377
'}';
6478
}
6579
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package no.nav.k9.søknad.felles.fravær;
2+
3+
import com.fasterxml.jackson.annotation.JsonCreator;
4+
import com.fasterxml.jackson.annotation.JsonValue;
5+
6+
public enum FraværÅrsak {
7+
STENGT_SKOLE_ELLER_BARNEHAGE(
8+
"STENGT_SKOLE_ELLER_BARNEHAGE",
9+
"Stengt skole eller barnehage"),
10+
11+
SMITTEVERNHENSYN(
12+
"SMITTEVERNHENSYN",
13+
"Smitteverhensyn"
14+
),
15+
16+
ORDINÆRT_FRAVÆR(
17+
"ORDINÆRT_FRAVÆR",
18+
"Ordinært fravær"
19+
);
20+
21+
22+
private String kode;
23+
private String årsak;
24+
25+
26+
FraværÅrsak(String kode, String årsak) {
27+
this.kode = kode;
28+
this.årsak = årsak;
29+
}
30+
31+
public String getÅrsak() {
32+
return årsak;
33+
}
34+
35+
@JsonValue
36+
public String getKode() { return kode; }
37+
38+
@JsonCreator
39+
public static FraværÅrsak of(String value) {
40+
if (value == null || value.isBlank()) {
41+
return null;
42+
}
43+
for (FraværÅrsak årsak : values()) {
44+
if (årsak.kode.equals(value)) {
45+
return årsak;
46+
}
47+
}
48+
throw new IllegalArgumentException("Ikke støttet årsak '" + value + "'");
49+
}
50+
}

soknad/src/main/java/no/nav/k9/søknad/ytelse/YtelseValidator.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
public abstract class YtelseValidator {
99
protected static final String PÅKREVD = "påkrevd";
10+
protected static final String UGYLDIG_ARGUMENT = "ugyldig argument";
1011

1112
public abstract List<Feil> valider(Ytelse søknad);
1213

soknad/src/main/java/no/nav/k9/søknad/ytelse/omsorgspenger/v1/OmsorgspengerUtbetalingValidator.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,11 @@ private void getAktivitet(OmsorgspengerUtbetaling søknad, List<Feil> feil) {
3333

3434
if (aktivitet != null) {
3535

36-
if (aktivitet.getFrilanser() != null
37-
|| (aktivitet.getSelvstendigNæringsdrivende() != null && !aktivitet.getSelvstendigNæringsdrivende().isEmpty())) {
36+
if ((aktivitet.getFrilanser() != null)
37+
|| ((aktivitet.getSelvstendigNæringsdrivende() != null) && !aktivitet.getSelvstendigNæringsdrivende().isEmpty())) {
3838
validerFrilanserOgSelvstendingNæringsdrivende(aktivitet.getSelvstendigNæringsdrivende(), aktivitet.getFrilanser(), feil);
3939
validerSelvstendingNæringsdrivende(aktivitet.getSelvstendigNæringsdrivende(), feil);
40+
validerFrilanser(aktivitet.getFrilanser(), feil);
4041
}
4142
}
4243
}
@@ -48,6 +49,18 @@ private void getAktivitet(OmsorgspengerUtbetaling søknad, List<Feil> feil) {
4849
}
4950
}
5051

52+
private void validerFrilanser(Frilanser frilanser, List<Feil> feil) {
53+
if (frilanser == null) return;
54+
55+
if (!frilanser.getJobberFortsattSomFrilans() && frilanser.getSluttdato() == null) {
56+
feil.add(new Feil("frilanser.sluttdato", PÅKREVD, "'sluttdato' kan ikke være null, dersom 'jobberFortsattSomFrilans' er false."));
57+
}
58+
59+
if (frilanser.getSluttdato() != null && frilanser.getStartdato().isAfter(frilanser.getSluttdato())) {
60+
feil.add(new Feil("frilanser.startdato", UGYLDIG_ARGUMENT, "'startdato' kan ikke være etter 'sluttdato'"));
61+
}
62+
}
63+
5164
private void validerSelvstendingNæringsdrivende(List<SelvstendigNæringsdrivende> selvstendigeVirksomheter, List<Feil> feil) {
5265
if (selvstendigeVirksomheter == null || selvstendigeVirksomheter.isEmpty())
5366
return;
@@ -72,11 +85,11 @@ private void getAktivitet(OmsorgspengerUtbetaling søknad, List<Feil> feil) {
7285
if (snInfo.getRegistrertIUtlandet() != null) {
7386
if (snInfo.getRegistrertIUtlandet() && snInfo.getLandkode() == null) {
7487
feil.add(new Feil(snInfoFelt + ".landkode", PÅKREVD,
75-
"landkode må være satt, og kan ikke være null, dersom virksomhet er registrert i utlandet."));
88+
"landkode må være satt, og kan ikke være null, dersom virksomhet er registrert i utlandet."));
7689
}
7790
} else if (sn.getOrganisasjonsnummer() == null) {
7891
feil.add(new Feil(snInfoFelt + ".registrertIUtlandet og " + snFelt + ".organisasjonsnummer", PÅKREVD,
79-
"Dersom virksomheten er registrert i norge, må organisasjonsnummeret være satt."));
92+
"Dersom virksomheten er registrert i norge, må organisasjonsnummeret være satt."));
8093
}
8194
});
8295
index++;

0 commit comments

Comments
 (0)